2

我无法强制会话在 PHP 中重新启动。这是问题所在:

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

session_id('the_session_id');
session_start();

当我打开一个新浏览器时,来自另一个浏览器的会话不会被延续。我可以检查哪些设置?

4

1 回答 1

0

原因:

如果您关闭浏览器窗口并再次打开它,那么此时将使用不同的 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);
于 2010-09-05T02:39:53.133 回答