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

时间:2010-09-05 00:14:31

标签: php session sessionid

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

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

session_id('the_session_id');
session_start();

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

1 个答案:

答案 0 :(得分: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);
相关问题