首页 > 解决方案 > 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>

标签: phpsession

解决方案


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


推荐阅读