php - 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 设置为与Sirius
cookie 完全相同,AdminPage
那么为什么它没有被拒绝?我正在使用 FireFox,如果这会产生影响并且我的主机是共享的,因此.ini
如果有人认为可能需要编辑它,那么编辑是不可能的。
解决方案
得到同样的错误。值得检查 nginx/apache 错误日志。
似乎,当 cookie 值使用本身发出错误的 php 函数时,firefox 将其记录为“已经过期”。
在我的情况下,我hash
错误地使用了该功能,并得到了这个错误。
看看是否$this->currentPage()
以其他方式正确返回。
推荐阅读
- here-api - Here API Routing - 避免未铺砌的道路
- mysql - 在 MySQL JSON 数据中使用 BETWEEN 比较 mysql 日期
- javascript - Z-index“中断”幻灯片单击按钮
- android - 在应用程序中使用相机或图库时,它会在按下 backButton 时崩溃
- rest - 为 REST API 设计 URI 的最佳方式
- python - 如何解决这个python错误?
- java - 每天在 AWS 中的特定时间安排一个 java 程序,并将返回的值存储在 Parse 服务器中
- java - Jpa 调用存储过程,无法在 ref_cursor 中转换时间戳
- javascript - 刷新 javascript 函数中的 PHP 变量
- java - 为了方便开发人员,我应该在接口中声明方法吗?