Php 自动会话过期

Php 自动会话过期,php,session,Php,Session,我面临着一个奇怪的情况。基本上在我做的每一个网页上 session_start(); if(!isset($_SESSION['login'])) header("Location: login.php"); 确保每个用户都已首先登录。我在chrome中工作,如果我登录到我的web应用程序并打开任何一个页面,它就会正常工作。同时,如果在另一个选项卡中,我登录到我的托管服务器,我将从我的web应用程序中注销。如果我再次登录到我的应用程序,我将退出我的托管服务器 我做错了什么?检查或设置会

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

session_start();
if(!isset($_SESSION['login']))
    header("Location: login.php");
确保每个用户都已首先登录。我在chrome中工作,如果我登录到我的web应用程序并打开任何一个页面,它就会正常工作。同时,如果在另一个选项卡中,我登录到我的托管服务器,我将从我的web应用程序中注销。如果我再次登录到我的应用程序,我将退出我的托管服务器

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

我将会议安排如下:

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

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

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

试试这个:

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应用程序中为会话设置其他名称


希望这能有所帮助。

我想您会发现原因是两台主机的网络名称相同,例如test.www.example.com和www.example.com


只需为测试机器使用不同的网络名称,它就会工作,或者确保显式地为会话使用非重叠值。cookie\u domain

$\u会话['login']
设置为
1
而不是
“1”
您的主机服务器是否与您的web应用程序使用相同的域名?@alex:这两者之间有什么区别吗?George:是的,这是一样的。主机是否与您的web应用程序写入同一个cookie,可能会覆盖会话ID或其他有用的信息?@Alex,在这种情况下,“1”和“1”都会导致
isset($\u session['login'])
返回true,因此它们在功能上是等效的。这个答案本质上是好的,但是,除了像
/public
这样的随机目录之外,您应该使用您的应用程序路径,这样您的应用程序将是唯一一个在该目录中设置会话cookie的应用程序。阅读:和