【问题标题】:PHP Cookies Won't SetPHP Cookies 不会设置
【发布时间】: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)。

标签: php cookies


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-27
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 2011-12-25
    • 1970-01-01
    相关资源
    最近更新 更多