PHP会话为不同文件夹发出“ session_set_cookie_params”新会话ID

时间:2019-06-05 10:25:13

标签: php session

美好的一天,

我的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>

1 个答案:

答案 0 :(得分:0)

您可以根据需要设置会话ID。您必须在会话开始之前执行此操作。