美好的一天,
我的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
现在为第一页设置的SESSION 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>
答案 0 :(得分:0)
您可以根据需要设置会话ID。您必须在会话开始之前执行此操作。