自动会话到期

时间:2012-01-12 13:35:05

标签: php session

我面临一个奇怪的情况。基本上在我正在做的每个网页上

session_start();
if(!isset($_SESSION['login']))
    header("Location: login.php");

确保每个用户都先登录。我正在使用chrome,如果我登录到我的Web应用程序并打开任何页面,它会正常工作。同时,如果在另一个选项卡中,我登录到我的托管服务器,我将退出我的Web应用程序。如果我再次登录我的应用程序,我将退出托管服务器!!

我做错了什么?我检查或设置会话变量的方式有问题吗?

我按如下方式设置会话:

//if authentication successful
session_start();
    $_SESSION['login'] = "1";

2 个答案:

答案 0 :(得分:1)

我有一个非常类似的问题,我认为这只是因为两个具有相同名称的会话,在同一个域的同一个地方不能共存。

也许解决方案应该是使用会话cookie。您可以仅为文件夹设置cookie,而不是为整个域设置cookie。这样我认为你可以同时管理2个会话,但我不确定。

试试这个:

session_start();
setcookie(session_name(), session_id(), 0, '/public/');

/public/可能是您网站所在的特定文件夹或应用程序路径(感谢Paul指出这一点)。

然后你会检查是否设置了会话:

$session_cookie = 
   isset($_COOKIE[ini_get('session.name')]) ? 
   $_COOKIE[ini_get('session.name')] : 
   null;

可能这不起作用,因为其他会话可能“存储”在Web应用程序的根文件夹中。但是,如果你能够为你的托管服务器做上述事情,你应该解决你的问题。

您还可以尝试在Web应用程序中为会话设置不同的名称。

希望这有帮助。

答案 1 :(得分:1)

我认为您会发现两个主机具有相同网络名称的原因,例如test.www.example.com和www.example.com

只需为测试计算机使用不同的网络名称,它应该可以使用或确保明确使用session.cookie_domain的非重叠值