PHP Cookies 不会设置

Posted

技术标签:

【中文标题】PHP Cookies 不会设置【英文标题】:PHP Cookies Won't Set 【发布时间】:2019-01-23 03:58:53 【问题描述】:

我在本地主机上。已经对 localhost 上的 cookie 和会话进行了很多讨论。但是,我的情况似乎很特殊。我尝试过以不同的方式设置 cookie,但似乎都不起作用,即使 $_SESSION 数组在设置会话变量后仍然为空。我尝试了以下组合在本地主机上设置 cookie:

setcookie("name", "value") setcookie("name", "value", 0) setcookie("name", "value", 0, "/", false) setcookie("name", "value", time()+86000, "/", false) setcookie("name", "value", time()+86000) setcookie("name", "value", time()+86000, ".localhost.com") setcookie("name", "value", time()+86000, "localhost.com") setcookie("name", "value", time()+86000, "localhost") setcookie("name", "value", 0, "/", ".localhost.com") setcookie("name", "value", 0, "/", ".localhost.com", false, false) setcookie("name", "value", 0, "/", "localhost") setcookie("name", "value", 0, "/", "localhost.com", false, false) setcookie("name", "value", 0, "/", "localhost.com")

我还在 php.ini 文件中编辑了会话 cookie 值,以反映我对 setcookie 的徒劳尝试。我还尝试将所有尝试的路径从“/”更改为“/user”。

我在 Apache 2.4.33 上使用 PHP 7.1,并将“localhost.com”配置为指向服务器文档根目录上的目录“/app_support”。我还将“app.localhost.com”配置为指向“/subdomains/app”目录,该目录也位于服务器的根目录上。我通过“app.localhost.com”访问我的网站,然后使用 AJAX 访问“localhost.com/user”。在“localhost.com/user”目录中,我有“user.php”,这是一个包含 User 类的文件,用于登录和设置 cookie。

我已经在 Firefox 60 中验证了为我的自定义 cookie 以及会话 cookie 发送的 cookie 标头,因此很明显是浏览器出于某种原因拒绝了它们。我在 Chrome 68 和 Chromium 66 中得到了相同的结果。

编辑:这是我设置 cookie 的部分。

session_regenerate_id();
$_SESSION['user']['id'] = $user['investor_id'];
$_SESSION['user']['surname'] = $user['surname'];
$_SESSION['user']['name'] = $user['given_name'];
$_SESSION['user']['email'] = $user['email'];
$selector = $this->generateCode(9);
$authenticator = $this->generateCode(33);
$expiry = time() + 2592000;

setcookie("logged_in", $selector.':'.$authenticator, $expiry, '/', '.localhost.com');

编辑 2:在 Firefox 上,以下是收到的 cookie 标头:

logged_in   
    domain  .localhost.com
    expires 2018-09-15T08:35:07.000Z
    path    /
    value   F668B2928:417076134356498468FDA03D496336BDA
PHPSESSID   
    domain  localhost.com
    httpOnly    true
    path    /user
    value   77h432cjgu25mrnauktnc6s471

【问题讨论】:

你能添加剩余的代码吗? @E141 还有哪些代码? 认为查看user.php 和您提到的课程可能有用吗? 我们需要查看设置 cookie 的脚本。您确实记得必须在脚本的任何其他输出之前发送 cookie,不是吗 @RamRaider user.php 有几千行。但是,该类中的所有内容都按预期工作(连接到数据库、获取用户信息、验证信息然后登录用户)。我将在问题中添加我设置 cookie 的相关部分(使用 setcookie$_SESSION)。 【参考方案1】:

所以,事实证明我的问题实际上是异常的,因为它与 PHP 无关。 cookie 的问题是因为我正在通过 JQuery.ajax 访问设置 cookie 的页面,这会导致浏览器自动拒绝 cookie,如 here 所讨论的那样,由于 CORS 规定。我的请求被认为是跨域的,因为我从子域发送请求。解决方案不在 PHP 中,而是在客户端,如this answer 所示。但是,如果通过应用该解决方案保留“x-requested-with”标头对您有用,那么您必须手动设置标头,如this answer 所示。

【讨论】:

以上是关于PHP Cookies 不会设置的主要内容,如果未能解决你的问题,请参考以下文章

关于Cookies和Session的有效时间分析

PHP Cookies

PHP Cookies 没有解除 [异常情况]

PHP Cookies 包含较少的数据

phpcms免登录cookies设置方案

设置类似于堆栈数组的cookies