2013-03-24 74 views
3

我创建了一个脚本login.php还有我已经创建了一个名为会话变量logged_in会话超时由于活动

$_SESSION['logged_in'] = true; 

我无法想出一个办法来重定向重定向到会议结束后我logout.php由于不活动而失效。我也应该把过期这个会话变量的代码。我已经谷歌搜索了这个错误,并且它建议在大多数文章中调整php.ini文件。但是我发现一篇文章说这不是最好的做法。

我发现StackOverflow上下面的代码,但我不知道在哪里把它: -

<?php 
    if ($_SESSION['timeout'] + 10 * 60 < time()) { 
    // session timed out 
    } else { 
    // session ok 
    } 
?> 

我想知道的最佳方式后会过期,而要放置代码的建议重定向。

编辑:我忘了提及我想知道如何手动设置会话过期的时间。

预先感谢您

回答

0

实现这个想法:

$expire_time = 3*60*60; //expire time 
if($_SESSION['last_activity'] < time()-$expire_time) { 
    echo 'session expired'; 
    die(); 
} 
else { 
    $_SESSION['last_activity'] = time(); // you have to add this line when logged in also; 
    echo 'you are uptodate'; 
} 
12

如果你想,如果他们试图加载时,他们已经闲置太久页注销用户,你应该把这个在每一个PHP文件的顶部代码(在任何其他HTML标签):

if($_SESSION['last_activity'] < time()-$_SESSION['expire_time']) { //have we expired? 
    //redirect to logout.php 
    header('Location: http://yoursite.com/logout.php'); //change yoursite.com to the name of you site!! 
} else{ //if we haven't expired: 
    $_SESSION['last_activity'] = time(); //this was the moment of last activity. 
} 

而且,把这段代码在页面的地方,你的土地,当你已经成功地记录在上面:

$_SESSION['logged_in'] = true; //set you've logged in 
$_SESSION['last_activity'] = time(); //your last activity was now, having logged in. 
$_SESSION['expire_time'] = 3*60*60; //expire time in seconds: three hours (you must change this) 

在该页面上,您不必包含我首先给出的检查代码。

顺便说一下,不要忘了正确添加<?php标签!

+0

session_start应该包含在所有页面中吗? – surfine 2013-03-24 07:56:34

+0

@surfine“session_start”完全代表什么意思?代码'$ _SESSION ['logged_in'] = true;'?你应该把它放在登录页面上。我编辑了我的答案。 – tomsmeding 2013-03-24 07:58:20

+0

这适用于我,但登录后我去的页面是我的应用程序主页,并且如果您等待定时器/会话在非主页的页面上过期,请单击首页链接会议继续。当会话过期时,我怎样才能使链接重新回到主页? – AlMar89 2015-09-17 17:02:13