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 不会设置的主要内容,如果未能解决你的问题,请参考以下文章