apache 使用__Secure-/__Host-前缀重命名PHP会话cookie

csbfibhn  于 2023-05-01  发布在  Apache
关注(0)|答案(3)|浏览(182)

我试图将我的PHP会话cookie从PHPSESSID重命名为__Secure-PHPSESSID,如www.example所示 www.example.com 网站上。
由于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"

这在Firefox、Edge和Safari中正常工作,但在Chrome中不行。在Chrome上,我可以看到cookie设置了正确的名称和标志,但我无法登录我的网站。
登录后,var_dump($_SESSION['internal']['user_name'])的输出在Chrome上是NULL,但在Firefox和其他浏览器上显示正确的用户名。我还可以看到每次尝试登录时都会重新生成会话ID,并且在__Secure-PHPSESSID cookie中设置了该值。
我尝试删除SameSite标志(上面第3行),但仍然不起作用。
有什么想法吗

eanckbw9

eanckbw91#

PHP确实提供了这种机制。您可以在php.ini中更改它。只需设置并重新启动网站:

session.name = __Secure-PHPSESSID

要确认它是正确的,请重新启动浏览器以清除以前的会话cookie。
至于Chrome不允许您登录,此页面可能会给予您一些线索(参见“选项安全”和“前缀”部分):https://www.mon-code.net/post/108/secure-cookie-of-you-web-application-with-php-or-symfony
它们并不广为人知,但除了微软的浏览器外,所有浏览器都支持它们。使用前缀,可以强制浏览器在配置错误时不接受cookie。有两个前缀“__Secure-”和“__Host-”。__Secure-强制开发人员将安全标志添加到他的cookie中,否则浏览器将忽略它。

setcookie('__Secure-user_id', 10, 0, '/', 'orion.dev', true);

__Host-的限制性更大,cookie必须具有安全标志,但也必须具有根域和空白域的路径。

setcookie('__Host-user_id', 10, 0, '/', '', true);
uwopmtnx

uwopmtnx2#

我不太熟悉Cookie Prefixes,但PHP应该支持out of the box

<?php

session_name('__Secure-PHPSESSID');
session_start();

uujelgoq

uujelgoq3#

实际上,你可以使用PHP来实现它,改变session.name参数。你可以这样做:
1.在PHP脚本中使用session_name()
1.在.htaccess文件中
1.直接到显示PHP选项的CPanel表中(如果您运行CPanel)
示例:

// Example way 1
session_name('Secure-PHPSESSID');
session_start();

// Example way 2
php_value session.name "Secure-PHPSESSID"

相关问题