Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP会话_id()不接受现有会话id_Php_Session_Sessionid - Fatal编程技术网

PHP会话_id()不接受现有会话id

PHP会话_id()不接受现有会话id,php,session,sessionid,Php,Session,Sessionid,在PHP中强制重新启动会话时遇到问题。问题是: 我可以使用session\u id()获取会话id,将其复制并添加到脚本的最顶端: session_id('the_session_id'); session_start(); 当我打开一个新浏览器时,来自另一个浏览器的会话不会继续。我可以检查哪些设置?原因: 如果关闭浏览器窗口并再次打开,则此时将使用不同的ID启动第二个会话,如果使用的web应用程序具有基于会话的身份验证系统,则用户必须再次登录。同时,用户必须注销两次 解决方案: 此函数将使用

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

我可以使用
session\u id()
获取会话id,将其复制并添加到脚本的最顶端:

session_id('the_session_id');
session_start();

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

原因:

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

解决方案:

此函数将使用会话ID的真实cookie,并在每次脚本执行时更新过期时间。过期时间等于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); 
    } 
} 

?>
要启动将在1小时后过期的会话,请执行以下操作:

start_session(3600);

原因:

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

解决方案:

此函数将使用会话ID的真实cookie,并在每次脚本执行时更新过期时间。过期时间等于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); 
    } 
} 

?>
要启动将在1小时后过期的会话,请执行以下操作:

start_session(3600);

“当我打开一个新浏览器时”-你的意思是如果你有FF然后打开IE?你找到解决这个问题的方法了吗,因为我的会话需要相同的东西?“当我打开一个新浏览器时”-你的意思是如果你有FF然后打开IE?你找到解决这个问题的方法了吗,因为我的会话需要相同的东西?谢谢。让我对我正在做的事情更具体一点,因为我认为这会有所不同。我使用的是flash上传程序,当flash插件执行PHP上传脚本时,会话中断,我得到一个302。因此,我将PHPSESSID作为一个post参数与Flash请求一起传递,在每个页面上我都有:if(isset($\u post['PHPSESSID']){session_id($\u post['PHPSESSID']);session_start();}但是当我转储$\u会话时,在该块中分配会话id时,它总是空的。它似乎在大多数服务器上都能正常工作。此技术是否被任何php.ini设置阻止?谢谢。让我对我正在做的事情更具体一点,因为我认为这会有所不同。我使用的是flash上传程序,当flash插件执行PHP上传脚本时,会话中断,我得到一个302。因此,我将PHPSESSID作为一个post参数与Flash请求一起传递,在每个页面上我都有:if(isset($\u post['PHPSESSID']){session_id($\u post['PHPSESSID']);session_start();}但是当我转储$\u会话时,在该块中分配会话id时,它总是空的。它似乎在大多数服务器上都能正常工作。此技术是否被任何php.ini设置阻止?