PHP Cookies不会设置

时间:2018-08-16 08:33:20

标签: php cookies

我在本地主机上。关于cookie和localhost上的会话的讨论很多。但是,我的情况似乎很特殊。我尝试以不同的方式设置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”,这是一个带有用户类的文件,我用于登录和设置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

1 个答案:

答案 0 :(得分:0)

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