Php 在AJAX请求中设置cookie?

Php 在AJAX请求中设置cookie?,php,ajax,cookies,session,Php,Ajax,Cookies,Session,我正在使用jQueryAjax调用PHP验证登录表单。在php中,我创建一个会话,如果他们选中“记住我”复选框,我想创建一个cookie。以下是php代码: <?php include '../includes/connection.php'; date_default_timezone_set('GMT'); $name = $_POST['username']; $pass = $_POST['password']; $query = mysql_query("SELECT i

我正在使用jQueryAjax调用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;
 }



}


?>

使用AJAX调用时,您将无法设置cookie服务器端。相反,请等到您获得成功响应并设置cookie客户端。为了简化,您可以。

以下是一些建议:

  • 确保您指定的日期过期格式正确
  • 在重定向页面上设置cookie时,必须在调用
    标题(“位置:…”)后设置cookie例如:

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

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

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

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

从PHP手册:

服务器上的路径,其中 cookie将在上提供。如果设置为 “/”,则cookie将可用 在整个域内。如果设置为 “/foo/”,则cookie将仅为 可在/foo/目录中找到 以及所有子目录,如 /域的foo/bar/of。默认值 值是当前正在运行的目录 正在设置cookie

  • setcookie()
    定义要与其余HTTP头一起发送的cookie。与其他标题一样,cookies必须在脚本输出之前发送,这意味着在此之前不应有html/代码回送语句

变量
$exp
从何而来?抱歉,这只是一个输入错误,$exp被较早地定义为过期日期(2个月)ooooooh,我认为您不想在cookie中设置密码,即使其md5'ed。会话ID更好。您可能会发现,如中所示。很抱歉,但是为什么不可能使用Ajax调用设置cookie呢?Ajax调用是一个常规http请求,具有自己的请求和响应头。我们可以将任何信息放入respose头中,包括cookies。我说的不对吗?为什么有5个人投了这个票?说你不能从AJAX调用中返回一个设置好的cookie头,或者说浏览器不会尊重它们,这完全是错误的,而“设置cookie服务器端”的说法似乎表明对HTTP的工作原理有一些基本的困惑。这与其他人的观点一致。这个答案应该被删除,因为它完全不正确。你可以在ajax中设置cookie,你不需要jQuery插件,也不需要jQuery来设置cookie,你可以用document来设置cookie。cookie:太棒了!我以前做过一个echo语句,改变了它,所有的东西都正常工作了,除了当我尝试创建根(“/”)的路径时,它没有设置cookies…我做错了什么吗?尝试删除最后一个参数,它是
“/”
,如果我这样做,它会工作,但只对当前目录有效,这不是根目录。我知道将路径设置为“/”允许从所有目录访问,这是我想要的。但是,当我这样做并添加路径时,cookie没有设置。仅当我省略路径时才设置。指定域修复了该问题。