2010-08-14 81 views
0

我需要設置自動會話超時後,在我的網站一些固定的時間。自動會話超時

我用下面的腳本,但它不能正常工作。

我設置了一段時間,但在此之前它會自動超時。

if((empty($Session_UserId)) || (empty($Session_Username))) 
    header("Location:index.php"); 

if($_SESSION['session_count'] == 0) { 
$_SESSION['session_count'] = 1; 
$_SESSION['session_start_time']=time(); 
} else { 
$_SESSION['session_count'] = $_SESSION['session_count'] + 1; 
} 

$session_timeout = $logout_sec; // 30 minute (in sec) 

$session_duration = time() - $_SESSION['session_start_time']; 
if ($session_duration > $session_timeout) { 
session_unset(); 
session_destroy(); 
session_start(); 
session_regenerate_id(true); 
$_SESSION["expired"] = "yes"; 
header("Location:index.php"); // Redirect to Login Page 
} else { 
$_SESSION['session_start_time']=time(); 
} 
+0

我看到session_start()在腳本的更遠處,就重置會話...而言,它的session_start()在哪裏呢?這是完整的腳本還是在它之前的某個地方,而你只是沒有發佈它? – 2010-08-14 17:59:47

+0

是的,你是正確的,這是我已經添加的腳本的一部分session_start() – gowri 2010-08-16 04:27:41

回答

0

你的代碼的問題是最後一個if/else結構。因爲如果會話沒有超時,會話開始時間被設置爲當前時間。所以這是一個「最後的活動」時間戳。如果刪除else塊,則會話將不會超過您的超時時間。

+0

你可以給我正確的代碼 謝謝 – gowri 2010-08-16 05:27:07

+0

@gowri:我不太清楚你的代碼打算做什麼。但是,如果您放棄最後一次'$ _SESSION ['session_start_time'] = time()',會話開始時間不會在會話尚未超時的每個請求中得到更新。 – Gumbo 2010-08-16 05:42:12

1

我想人們想說的是,試試下面的代碼。這是你的代碼的複製/粘貼,沒有最後的else語句。

if((empty($Session_UserId)) || (empty($Session_Username))) 
header("Location:index.php"); 

if($_SESSION['session_count'] == 0) { 
$_SESSION['session_count'] = 1; 
$_SESSION['session_start_time']=time(); 
} else { 
$_SESSION['session_count'] = $_SESSION['session_count'] + 1; 
} 

$session_timeout = $logout_sec; // 30 minute (in sec) 

$session_duration = time() - $_SESSION['session_start_time']; 
if ($session_duration > $session_timeout) { 
session_unset(); 
session_destroy(); 
session_start(); 
session_regenerate_id(true); 
$_SESSION["expired"] = "yes"; 
header("Location:index.php"); // Redirect to Login Page 
}