PHP session_id() 不接受现有会话 ID

发布于 2024-09-18 10:51:05 字数 217 浏览 8 评论 0原文

我在强制 PHP 会话重新启动时遇到问题。问题是:

我可以使用 session_id() 获取会话 ID,复制它,然后将其添加到脚本的最顶部:

session_id('the_session_id');
session_start();

当我打开新浏览器时,来自其他浏览器的会话是没有结转。我可以检查哪些设置?

I'm having trouble forcing sessions to restart in PHP. Here's the problem:

I can get my session id with session_id(), copy it, and add to the very top of my script:

session_id('the_session_id');
session_start();

And when I open a new browser, the session from the other browser is not carried over. What settings can I check?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

め七分饶幸 2024-09-25 10:51:05

原因:

如果您关闭浏览器窗口并再次打开它,则此时会使用不同的 ID 启动第二个会话,如果所使用的 Web 应用程序具有某种基于会话的身份验证系统,则用户必须登录再次。同时用户必须注销两次!

解决方案:

此函数将使用真实的 cookie 作为会话 ID,并在每次脚本执行时更新过期时间。过期时间等于 PHP 指令“gc_maxlifetime”(默认)或每个自定义值。因此,将此函数放入您的 PHP 文件中。我们会需要它。

<?php 

// $expire = the time in seconds until a session have to expire 
function start_session($expire = 0)
{ 
    if ($expire == 0)
        $expire = ini_get("session.gc_maxlifetime"); 
    else
        ini_set("session.gc_maxlifetime", $expire); 

    if (empty($_COOKIE['PHPSESSID']))
    { 
        session_set_cookie_params($expire); 
        session_start(); 
    }
    else
    { 
        session_start(); 
        setcookie("PHPSESSID", session_id(), time() + $expire); 
    } 
} 

?>

现在,在您要发出 session_id('the_session_id');session_start(); 的页面顶部,删除这些行并使用下面的代码启动会话:

启动一个由 php 配置指定的过期时间的会话

start_session();

启动一个将在 1 小时后过期的会话:

start_session(3600);

Reason:

If you close the browser window and open it again, then at this moment a second session is started with a different ID, if the used web application has some session based authentication system the user has to login again. At the same time the user has to logout twice!

Solution:

This function will use a real cookie for the session ID and updates the expiration time with every script execution. The expiration is equal to the PHP directive "gc_maxlifetime" (default) or every custom value. So, put this function in your PHP file. We will need it.

<?php 

// $expire = the time in seconds until a session have to expire 
function start_session($expire = 0)
{ 
    if ($expire == 0)
        $expire = ini_get("session.gc_maxlifetime"); 
    else
        ini_set("session.gc_maxlifetime", $expire); 

    if (empty($_COOKIE['PHPSESSID']))
    { 
        session_set_cookie_params($expire); 
        session_start(); 
    }
    else
    { 
        session_start(); 
        setcookie("PHPSESSID", session_id(), time() + $expire); 
    } 
} 

?>

Now, in the top of your page where you're issuing session_id('the_session_id'); and session_start();, remove those lines and start session with this code below:

To start a session with an expire time given by the php configuration

start_session();

To start a session that will expire in 1 hour:

start_session(3600);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文