2015-05-04 97 views
0

我是网页开发人员的初学者。我花了一些时间认识到用PHP限制会话时间的方法。我已经阅读了Stackoverflow的建议,但是他们中的任何一个似乎都不适合我(cookie - 可能由用户编辑,AJAX通信 - 服务器和静态PHP的额外负载 - 浏览器中的被动选项卡?使用会话变量进行验证)。会话的控制持续时间PHP

我想到这一点:

<script type="text/javascript"> 
    $(document).ready(function() { 
     setTimeout(function() { 
      window.location.href = 'logout.php'; 
     }, 10000); 
    }); 
</script> 

...来限制用户会话时间。该系统将用于管理Web应用程序。任何人都可以指出我的方法可能存在的缺点,因为它似乎太简单而不好?每一个PHP页面上

+0

禁用JavaScript很容易做到,并会阻止它运行。 –

+0

这个脚本的问题是,每次加载这个脚本时,浏览器都会在10秒内转到“logout.php”。当刷新此页面时,10秒倒计时将重新开始。 – Aviz

+0

谢谢,到目前为止我的目的似乎很好。由于与用户和数据库的动态交互,我的系统将强制用户启用JavaScript。当用户停用10秒(会增加)时,它会将他注销。 – Roman

回答

0
<?php 
function check_user_is_valid() { 
    //Start our session. 
    session_start(); 

    //Expire the session if user is inactive for 30 
    //minutes or more. 
    $expireAfter = 30; 

    //Check to see if our "last action" session 
    //variable has been set. 
    if(isset($_SESSION['last_action'])){ 

     //Figure out how many seconds have passed 
     //since the user was last active. 
     $secondsInactive = time()-$_SESSION['last_action']; 

     //Convert our minutes into seconds. 
     $expireAfterSeconds = $expireAfter * 60; 

     //Check to see if they have been inactive for too long. 
     if($secondsInactive >= $expireAfterSeconds){ 
      //User has been inactive for too long. 
      //Kill their session. 
      session_unset(); 
      session_destroy(); 
     } 
    } 
} 

//Assign the current timestamp as the user's 
//latest activity 
$_SESSION['last_action'] = time(); 

呼叫check_user_is_valid()函数来检查用户是否具有有效的session.It如果页面仍然是30分钟会自动销毁会话。

使用每个页面上的新时间更新$ _SESSION ['last_login']变量的值,以便用户为每个页面获得30分钟会话。

+0

感谢您的回答,但我认为您的方法不适用于浏览器中的被动选项卡。某些操作应该触发此脚本。 – Roman

+0

你为什么不尝试使用ajax方法。您可以将此脚本放在ajax调用中,并可以在每个被动选项卡单击时检查会话值 –