【问题标题】:A cookie is set but cannot be accessed with $_COOKIE; Rejectedcookie 已设置,但无法使用 $_COOKIE 访问;被拒绝
【发布时间】:2022-04-15 23:42:42
【问题描述】:

我设置了一个 cookie 来记录管理员位置,因此如果他们会话超时,他们可以在重新登录时访问他们上次访问的页面,或者如果我向他们发送链接,他们可以登录并被重定向到我的页面发送它们而不是仪表板。该 cookie 似乎与我设置的其他一些 cookie 一起存在于浏览器中。

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

当我对 $_COOKIE 数组执行 var_dump 时,我得到:

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... |

AdminPage cookie 是通过代码攻击设置的,所有 cookie 都以类似的方式设置,除了通过 JavaScript 设置的 locked 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 会被拒绝?我将Sirius cookie 设置为与AdminPage 完全相同,除了名称和值之外,为什么它没有被拒绝? 我正在使用 FireFox,如果这会产生影响,并且我的主机是共享的,所以编辑 .ini 是不可能的,如果有人觉得可能需要它。

【问题讨论】:

  • 只是一个想法...您可能希望使用一种考虑到浏览器是多选项卡的方法,例如在重定向到登录页面和发布内容时将当前选项卡的位置存储为 URL 参数重定向到原始位置。

标签: php cookies


【解决方案1】:

我假设这是 firefox.. 有一个关于过期 cookie 消息的错误报告打开:https://bugzilla.mozilla.org/show_bug.cgi?id=1676651

简单的解决方案是清空您的 cookie 缓存。或者您可以按照以下方式删除旧的过期 cookie:Cannot remove a cookie - Firefox rejecting cookies from the past

【讨论】:

  • 这无助于在 PHP 中通过 $_COOKIE 访问 cookie。我尝试清空 cookie,我的脚本将它们重置(和以前一样),但仍然找不到 AdminPage 工作。
  • 如果它的firefox清空了firefox的cookie缓存,不重置$_COOKIE var
  • 这就是我在 FireFox 中所做的。
【解决方案2】:

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

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

在我的例子中,我错误地使用了hash 函数,并得到了这个错误。

查看$this->currentPage() 是否正确返回。

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,但是我使用了以下命令:header(),并在此处设置了 cookie。 我已经按照这个链接做了:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    猜你喜欢
    • 2018-07-19
    • 2016-12-02
    • 2012-05-12
    • 1970-01-01
    • 2016-08-11
    • 2022-12-01
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    相关资源
    最近更新 更多