【问题标题】:Set cookie with php from an ajax call [closed]从 ajax 调用中使用 php 设置 cookie [关闭]
【发布时间】:2013-05-04 08:17:57
【问题描述】:

我已经查看了很多关于这个主题的帖子,但我的代码似乎并没有设置任何 cookie。

所以我最初的 ajax 调用是这样的:

$("#loginForm").submit(function(event) {
    event.preventDefault();
    var uid = document.getElementById("userLogin").value;
    var pid = document.getElementById("passLogin").value;
    var url = "../_scripts/loginScript.php";

     $.ajax({
            type: "POST",
            url: url,
            datatype : "script",            
            data: {user: uid, pass: pid},
            success: function(msg) {
                if( strcmp(msg,"passwords are equal") )
                    location.reload();
                else                        
                    $('#error1').html(msg).show(100);       
            }
    });
});

我在另一个 js 库中编写了 strcmp() 函数。

在做了一堆散列和加盐之后,我的 php 看起来像这样:

<?php
    if($hashPass == $pass)
    {
        echo "passwords are equal";
        $cookieInfo = $_POST['user'].",".$clearance;
        setcookie("loggedIn", $cookeInfo,0,"/");
        exit;
    }
    else
    {
        echo "Invalid password";
        exit;
    }
?>

当我测试它时,“密码相等”消息回来并且页面被重新加载......但是当我检查我的浏览器时我的 cookie 永远不会被设置。

我不确定我做错了什么......我之前使用过这个代码,当我使用表单直接提交到一个 php 文件并且它工作正常,但现在我使用的是 ajax cookie 似乎没有设置。

是因为我在header("Location: ..."); 调用后没有设置 cookie..?

【问题讨论】:

    标签: php javascript ajax


    【解决方案1】:

    这里有几件事。在调用 setcookie() 之前回显数据将引发错误,因为 PHP 认为标头已发送。此外,您的代码中有错字。您将 cookie 值设置为 $cookieInfo 并使用 $cookeInfo 作为 setcookie() 的参数。

    【讨论】:

      【解决方案2】:

      您的setcookie() 声明中有错字。因此,cookie 没有可用的数据。

      setcookie("loggedIn", $cookeInfo,0,"/");
      

      应该是

      setcookie("loggedIn", $cookieInfo,0,"/"); // cookie != cooke
      

      此外,您应该删除echo 语句以避免在标题之前发送输出。所有标头信息(包括 cookie 设置)必须在其他类型的输出之前发送。

      【讨论】:

      • 哇,我不敢相信我没有看到。感谢您指出了这一点。只是将 echo 语句移动到 setcookie.. 下方的行是没有意义的吗?
      • 是的,您可以将回声移到setcookie() 下方。这将允许在数据之前发送所有标头。
      • 好的,我将 echo 移到 setcookie() 调用下方,现在效果很好,非常感谢您的帮助。我现在唯一的问题是我的 strcmp() 函数不再起作用并且页面没有重新加载......对此有什么建议吗?你知道如果设置cookie一些如何改变味精的数据类型?
      • @user2367497 Javascript 没有 strcmp(). 也许试试 this
      • 大声笑不,strcmp() 是我自己创建的函数。尽管感谢所有帮助,但我现在可以正常工作了。
      猜你喜欢
      • 2012-01-15
      • 2013-03-31
      • 1970-01-01
      • 2012-05-31
      • 2013-09-21
      • 2017-02-20
      • 2017-10-01
      • 2013-10-06
      • 1970-01-01
      相关资源
      最近更新 更多