2015-11-17 234 views
3

我想了解何时PHP会话将超时并强制用户重新登录回来。PHP会话超时/注销

当该网站用户首次登录成功,我设置全局像这样的会议:

$_SESSION['AcmeAuthenticated'] = TRUE; 

在其他每一页我在页面顶部检查此:

if (!isset($_SESSION['AcmeAuthenticated']) and $_SESSION['AcmeAuthenticated'] !== TRUE) { 
header('Location: index.php'); 
die; 
} 

我注意到在开发过程中,我可以保持我的浏览器整天打开,它不会再要求我再次登录。如果我退出浏览器,那么它会提示我再次登录。我检查了PHP信息和session.gc_maxlifetime设置为900 - 我是否认为PHP会话将在15分钟内结束?

我是PHP新手,所以仍试图了解会话如何工作以及超时生效的时间。

+0

您应该使用适当的比较运算符 - '&&'而不是'和'。 – Darren

回答

0

当您退出浏览器时,它将清除所有会话。这就是为什么你每次退出浏览器时都必须重新登录。但是,是的,您可以设置您希望SESSION持续多久。它向您展示了如何: How do I expire a PHP session after 30 minutes?

+0

这是一个绝不是真的绝杀。这取决于会话是由Cookie处理还是通过查询字符串处理,在Cookie生存期以及客户端是否在关闭时删除Cookie(这是客户端配置并且不在您的控制范围内)。某些网站通过AJAX频繁更新,所以每刷新一次,会话超时将被重置,但在浏览器窗口关闭后,该功能不会出现,因此会话将过期。 – syck

+0

@syck老兄,你浏览我的答案是什么? – frosty

+0

只有一个。当我读到你认为缩进使脚本不易读时,我感兴趣的是你可能有多少编程经验。 – syck

0

if的说法应该是:

if(!isset($_SESSION['AcmeAuthenticated']) && $_SESSION['AcmeAuthenticated'] !== true) 
{ 
    header('Location: index.php'); 
    die; 
} 

你应该需要使用&&而不是and。随意使用session_set_cookie_params()来操纵会话cookie参数,但它听起来像你的cookie是'会话'cookie;这就是为什么它在浏览器关闭后会消失。

0

当浏览器窗口关闭时,PHP会话结束[1]。

是的,session.gc_maxlifetime是以秒为单位设置的,所以900是15分钟。你可能想要达到约30,000(约8小时)。