rin*_*t.6 6 php apache cookies session google-chrome
我正在尝试将我的 PHP 会话 cookie 从PHPSESSID重命名__Secure-PHPSESSID为https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#Examples。
由于 PHP 不提供这种机制,我通过 Apache 服务器配置来实现:
RequestHeader edit Cookie ^__Secure-PHPSESSID(.*)$ PHPSESSID$1
Header edit Set-Cookie ^PHPSESSID(.*)$ __Secure-PHPSESSID$1
Header edit Set-Cookie ^(.*)(?<!SameSite=Strict)(?<!SameSite=Lax)$ "$1;SameSite=Lax"
Run Code Online (Sandbox Code Playgroud)
这在 Firefox、Edge 和 Safari 中可以正常工作,但在 Chrome 中则不行。在 Chrome 上,我可以看到 cookie 设置了正确的名称和标志,但我无法登录我的网站。
var_dump($_SESSION['internal']['user_name'])登录后,在 Chrome 上显示的输出NULL,但在 Firefox 和其他浏览器上显示正确的用户名。我还可以看到,每次尝试登录时都会重新生成会话 ID,并且该值会在 cookie 中设置__Secure-PHPSESSID。
我尝试删除该SameSite标志(上面第 3 行),但它仍然不起作用。
有任何想法吗?
PHP 确实提供了这种机制。您可以在 中更改它php.ini。只需设置此并重新启动站点即可:
session.name = __Secure-PHPSESSID
Run Code Online (Sandbox Code Playgroud)
要确认其正确性,请重新启动浏览器以清除以前的会话 cookie。
至于 Chrome 不允许您登录,此页面可能会给您一些线索(请参阅“安全选项”和“前缀”部分):https://www.mon-code.net/post/108/secure-cookie-of -you-web-application-with-php-or-symfony
它们并不为人所知,但除 Microsoft 的浏览器外,所有浏览器都支持它们。使用前缀,如果配置错误,可以强制浏览器不接受 cookie。有两个前缀“
__Secure-”和“__Host-”。__Secure-强制开发人员将安全标志添加到他的 cookie 中,否则浏览器将忽略它。Run Code Online (Sandbox Code Playgroud)setcookie('__Secure-user_id', 10, 0, '/', 'orion.dev', true);
__Host-更具限制性,cookie 必须具有安全标志,而且还必须具有根和空白域的路径。Run Code Online (Sandbox Code Playgroud)setcookie('__Host-user_id', 10, 0, '/', '', true);
我不熟悉Cookie 前缀,但 PHP 应该开箱即用地支持它:
<?php
session_name('__Secure-PHPSESSID');
session_start();
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
6748 次 |
| 最近记录: |