首页 > 解决方案 > cookie 已设置,但无法使用 $_COOKIE 访问;被拒绝

问题描述

我设置了一个 cookie 来记录管理员位置,因此如果他们会话超时,他们可以访问他们在重新登录时上次访问的页面,或者如果我向他们发送链接,他们可以登录并被重定向到我发送给他们的页面的仪表板。cookie 确实出现在浏览器中,还有我设置的其他几个。

但是,当我检查 cookie 是否存在时,$_COOKIE["AdminPage"]它总是出现空。

当我做一个数组时,我得到var_dump$_COOKIE

array (size=2)
  'PHPSESSID' => string '4f7949bde665b3ceae66624b3ecb6afe' (length=32)
  'Sirius' => string 'sY80fAjJm93OHtfj'... (length=1145)

var_dump 中应该至少还有两个 cookie。一个根据我的控制台命名AdminPage,一个命名。locked我的控制台如下:

Console Cookies
---------------
Name        |   Value                                                               |   Domain       |  Path        |   Expires                         |   Size    | HttpOnly      |   Secure      |   SameSite    |   Last Accessed       |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
AdminPage   |   https%3A%2F%2Fdsm.example.ca%3A443%2Fsystem%2Fsettings%2Fsaved%2F   |   .example.ca  |  /           |   Tue, 19 Jan 2021 03:40:50 GMT   |   78      | true          |   true        |   Lax         |   Sun, 20 Dec 2020... |
locked      |   1                                                                   | dsm.example.ca |  /           |   Session                         |   7       | false         |   false       |   Lax         |   Sun, 20 Dec 2020... |
PHPSESSID   |   4f7949bde665b3ceae66624b3ecb6afe                                    |   .example.ca  |  /           |   Session                         |   41      | false         |   false       |   None        |   Sun, 20 Dec 2020... |
Sirius      |   LRF6aQDwY1kEVR9o5j6xubt4LFW09yZaNAzst5GhqpDvypriKlZ4agJTqnkF2 ...   |   .example.ca  |  /           |   Tue, 19 Jan 2021 03:40:50 GMT   |   1151    | true          |   true        |   Lax         |   Sun, 20 Dec 2020... |

cookie 是通过代码设置设置的AdminPage,所有 cookie 都以类似的方式设置,除了locked通过 JavaScript 设置的 cookie。locked(如果cookie 在 PHP 中可用,这并不重要)

$arr_cookie_options = array (
            'expires' => strtotime( '+30 days' ),
            'path' => '/',
            'domain' => '.'.$data["domain"], // leading dot for compatibility or use subdomain
            'secure' => true,     // or false
            'httponly' => true,    // or false
            'samesite' => 'LAX' // None || Lax  || Strict
        );
setcookie("AdminPage",$this->currentPage(),$arr_cookie_options);

我还在控制台中注意到:

Cookie “locked” has been rejected because it is already expired.
Cookie “AdminPage” has been rejected because it is already expired.

如果拒绝是我无法在 PHP 中访问这两个的原因,那么为什么我的 cookie 会被拒绝?除了名称和值之外,我将 cookie 设置为与Siriuscookie 完全相同,AdminPage那么为什么它没有被拒绝?我正在使用 FireFox,如果这会产生影响并且我的主机是共享的,因此.ini如果有人认为可能需要编辑它,那么编辑是不可能的。

标签: phpcookies

解决方案


得到同样的错误。值得检查 nginx/apache 错误日志。

似乎,当 cookie 值使用本身发出错误的 php 函数时,firefox 将其记录为“已经过期”。

在我的情况下,我hash错误地使用了该功能,并得到了这个错误。

看看是否$this->currentPage()以其他方式正确返回。


推荐阅读