php - 通过 ajax 调用使用 php 设置 cookie

标签 php javascript ajax

<分区>

我已经查看了很多关于这个主题的帖子,但我的代码似乎并没有设置任何 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..?

最佳答案

您的 setcookie() 语句中有错字。因此,没有可用于 cookie 的数据。

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

应该是

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

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

关于php - 通过 ajax 调用使用 php 设置 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16468837/

相关文章:

Javascript 混淆 AJAX 代码

c# - 在页面加载时更改 Aspx 页面正文图像 - ASP.Net

javascript - 将按钮属性中的文本复制到剪贴板

javascript - Fetch API 方法中的 React Native Catch 不起作用

javascript - 将 JSON 数组中的对象添加到 JavaScript 数组中,并重新映射键

javascript - jQuery $.post 不发送数据

使用表 2 值添加到表 1 时出现 PHP SQL 语法错误

PHP strip_tags : allows <br/>?

php - 从不知道当前配置文件的 PHP 运行 Windows Powershell

iphone - 使用 PhoneGap 的 ios 中的 Ajax https 调用不起作用?