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