2010-06-18 132 views
0

我有一些代碼會在用戶閒置x秒後記錄用戶。問題是它在指定的時間之前將它們註銷,甚至不計算不活動。PHP會話超時,代碼問題

這是代碼:

<?php 
    $_SESSION['loginTime'] = time(); 

    if($_SESSION['loginTime'] < time()+10*60){ 
     $error_msg ="Logged out due to inactivity"; 

showLoginPasswordProtect($error_msg); 

session_destroy(); 
    } 
    ? 
+1

因爲登錄時間總是少於time()+任何東西!? – 2010-06-18 17:03:42

回答

0

你需要設置$_SESSION['loginTime']在一個單獨的腳本,用戶通過身份驗證後,大概。

然後在這個腳本中,你需要找出會話時間和當前時間之間的差異,然後看看它是否大於你的超時閾值。

例如:

if((time() - $_SESSION['loginTime']) > 10*60) { ... } 
1

$_SESSION['loginTime']是他們登錄(希望)時間戳將始終小於當前的時間戳,因爲你加一個每一秒。所以你需要這樣做:

<?php 

if($_SESSION['loginTime'] + 600 < time()){ 
    $error_msg ="Logged out due to inactivity"; 

    showLoginPasswordProtect($error_msg); 

    session_destroy(); 
} 
?> 

這樣,如果600秒過去了,它將運行語句。

0

看看你的腳本是這樣做的:

  1. $_SESSION['loginTime'] = time();

...設置 'loginTime' 爲當前時間。比方說,目前的時間是 '10'

  • if($_SESSION['loginTime'] < time()+10*60)
  • ...因爲我們假定當前時間是10,那麼time()+10*60變得10+10*60 = 610,和if()變爲:if (10 < 610) {

    所以,你的代碼總是會註銷用戶,因爲你的邏輯被破壞了。

    您需要在登錄腳本中設置loginTime ONCE,而不是像現在這樣每次都設置它。