2013-08-01 57 views
1

這裏我發佈了一個示例代碼,它給了我正確的結果。如果我不這樣做60秒的任何行動比我自動從page.let註銷低於會話超時如何在網站中工作

<?php 
session_start(); 
// set time-out period (in seconds) 
$inactive = 600; 

// check to see if $_SESSION["timeout"] is set 
if (isset($_SESSION["timeout"])) { 
    // calculate the session's "time to live" 
    $sessionTTL = time() - $_SESSION["timeout"]; 
    if ($sessionTTL > $inactive) { 
     session_destroy(); 
     header("Location: /logout.php"); 
    } 
} 

$_SESSION["timeout"] = time(); 

代碼現在的問題是,isset()函數的功能裏面,我們計算$ sessionTTL意思。現在我們有兩個操作數,第一個是time(),第二個操作數是當前時間,第二個操作數是$ _SESSION [「timeout」],這個超時也包含當前時間,所以兩者的差值始終爲零。這個代碼,所以如何能夠做出來的,我很空閒60秒,並能夠摧毀了會議。 請解釋這背後的概念!

+1

你確定'$ _SESSION [「timeout」]'是否設置了當前時間?以及如何在沒有'ajax'或'javascript'的情況下工作? –

+0

沒有差異。所有時間都不會爲零,因爲您在條件第一個條件檢查後創建了會話,然後在分配會話後 –

+0

是$ _SESSION [「timeout」]設置爲time();你可以檢查我從哪裏得到這個網站:http://phpmaster.com/php-sessions/ –

回答

1

考慮您呼叫的網站第一次。我們假設當前時間戳是100隨後的$_SESSION["timeout"]值將被設置爲100

請注意,time()$_SESSION["timeout"]分配是在腳本的結束。

5秒鐘後,用戶點擊一個鏈接,並在這五秒鐘後訪問另一個頁面。然後腳本將被執行並且$sessionTTL = time() - $_SESSION["timeout"];將被計算。由於我們現在進一步在5秒內,所以time()將返回105.但是,$_SESSION["timeout"]仍將包含100,因爲它將在腳本結束時再次設置(腳本尚未在執行過程中結束)。 然後差異將是5秒。由於5 < 600,分支將不會被採用,並且$_SESSION["timeout"]可以再次被設置爲當前時間(105)。

現在用戶等待20分鐘,即1200秒。然後他點擊一個鏈接。

值現在是:

$_SESSION["timeout"]: 105 
time(): 1305 

所以差這一次將1200和因此比600大,所以狀態塊將被執行,並且會話將被銷燬。