2013-03-24 112 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