【发布时间】: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 参数重定向到原始位置。