php - PHP会话问题“session_set_cookie_params”不同文件夹的新会话ID
问题描述
再会,
我的 PHP 会话有一个很好的问题。其中最大的一个实际上是它大部分时间都在工作。但有些时候并非如此。
我有一种 CMS 系统,其工作方式如下:
(第一页) https://www.example.com/
(第二页)https://www.example.com/stackoverflow-cool-site.html
(第三页)https://www.example.com/houston-we-have-a-problem/what-problem-do-you-have.html
现在我尝试在主页上的 GET 参数的手边设置一个 SESSION 变量,这样如果会话已设置,第三页就可以使用它。例如:
htts://www.example.com?set=good_weather
现在为第一页设置的会话 ID 是qavuaadh6l0b9qhmrv9unr0chc 但我注意到其他页面给出: 2gmdggiv9k43khtsikm2eo1rvh
当然,会话 ID 可以是任何东西,这不是什么大问题。但它是一个不同的 SESSION ID。
现在这个问题已经出现了!答案是,session_set_cookie_params https://www.php.net/manual/en/function.session-set-cookie-params.php
但是,我已经这样做了。并以适当的顺序。但可能不像我应该的那样。我真的很想知道我的问题出在哪里。
session_set_cookie_params(
self::$limit, /// **** LIFETIME OF THE SESSION COOKIE (in seconds)
self::$path, /// **** THE DOMAIN FOR WHERE THE COOKIE WILL WORK. (single / for all paths on the domain.)
self::$domain, /// **** DEFINE THE DOMAIN NAME
self::$secure, /// **** ONLY BY SECURE CONNECTIONS
self::$httponly /// **** INDICATE THAT THE SESSION COOKIE IS AVAILABLE THROUGH HTTP PROTOCOLS ONLY (not by Javascript)
);
如果你填写你得到的变量值:
session_set_cookie_params(
432000,
'/',
'example.com',
true,
true
);
据我所见和理解,这应该是正确的。但事实并非如此。我希望有人能阐明我的错误。
提前致谢。
HTTPS 我正在通过 HTTPS 访问该站点,并且我对设置脚本的每次调用都仅通过 HTTPS 进行。
脚本 我将所有呼叫路由到同一个脚本。我正在使用 .htaccess 脚本来使其正常工作。
DirectoryIndex core/index.php
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ core/index.php?url=$1 [QSA,L]
</IfModule>
解决方案
如果需要,您可以设置会话 ID。您必须在会话开始之前执行此操作。