在AJAX请求中设置cookie?

wil*_*amg 13 php cookies ajax session

我正在使用jQuery AJAX调用PHP来验证登录表单.在php中,我创建了一个会话,如果他们选中了"记住我"复选框,我想创建一个cookie.这是php代码:

<?php

include '../includes/connection.php';
date_default_timezone_set('GMT');

$name = $_POST['username'];
$pass = $_POST['password'];


$query = mysql_query("SELECT id, username, password FROM users WHERE username = '$name' LIMIT 1");

if(mysql_num_rows($query) == 0) {
 echo 'error';
 exit;
}

while($row = mysql_fetch_array($query)) {

 if($row['username'] == $name && $row['password'] == $pass) {

  session_start();
  $_SESSION['username'] = $row['username'];
  $_SESSION['usrID'] = $row['id'];
  echo 'success';


  if($_POST['remember']) {
   setcookie('username', $row['username'], $exp);
   setcookie('password', $row['password'], $exp);
   setcookie('usrID', $row['id'], $exp);
  }

 } else {
  echo 'error';
  exit;
 }



}


?>
Run Code Online (Sandbox Code Playgroud)

会话设置成功,但cookie根本没有设置.我已经尝试设置所有值(域,路径等),但没有改变任何东西.有什么明显我想念的吗?

Sar*_*raz 18

以下是一些建议:

  • 确保您指定了正确的到期日期格式
  • 在重定向的页面上设置cookie时,必须在调用后设置cookie, header('Location: ....');例如:

    header('Location: http://www.example.com/'); setcookie('asite', $site, time()+60*60, '/', 'site.com');

  • 如果您有类似的人工网址www.domain.com/path1/path2/,则必须将cookie路径设置为/以适用于所有路径,而不仅仅是当前路径.

    setcookie('type_id', $new_type_id, time() + 60*60*24*30, '/');

注意/参数中的最后一个.

从PHP手册:

服务器上可以使用cookie的路径.如果设置为"/",则cookie将在整个域中可用.如果设置为'/ foo /',则cookie只能在/ foo /目录和所有子目录中使用,例如/ foo/bar/of domain.默认值是设置cookie的当前目录.

  • setcookie()定义要与其余HTTP标头一起发送的cookie.与其他标头一样,必须在脚本的任何输出之前发送cookie,这意味着在此之前不应该有html/code echo语句.