當用戶登錄時一樣,所以我創建一個會話:PHP會話超時
$_SESSION['id'] = $id;
我怎麼能在X分鐘即會話指定超時,然後把它執行功能或頁面重定向一次它已經達到了X分鐘?
編輯:我忘了提及,我需要會議超時由於不活動。
當用戶登錄時一樣,所以我創建一個會話:PHP會話超時
$_SESSION['id'] = $id;
我怎麼能在X分鐘即會話指定超時,然後把它執行功能或頁面重定向一次它已經達到了X分鐘?
編輯:我忘了提及,我需要會議超時由於不活動。
第一,存儲用戶最後一次在隨後的請求提出的要求
<?php
$_SESSION['timeout'] = time();
?>
,檢查多久前,他們做了他們以前的請求(在這個例子中10分鐘)
<?php
if ($_SESSION['timeout'] + 10 * 60 < time()) {
// session timed out
} else {
// session ok
}
?>
但是,如果您的PHPINI中的默認會話超時時間短於您的時間選擇。 默認情況下,超時通常少於一個小時。 如果您不希望客戶端控制超時,則需要將此代碼與session.cookie_lifetime的ini_set組合起來。 此答案也不處理客戶端刪除其Cookie的情況。 – Olhovsky 2012-07-27 11:32:27
PHP默認爲'0',意思是:「在瀏覽器關閉之前」。如果瀏覽器刪除了這個cookie,'$ _SESSION ['timeout']'var就不會被設置在第一位。但是,我忽略了所有其他的會話管理,因爲這個問題只會詢問超時。 – Jacco 2012-09-08 09:50:24
當會話過期數據不再存在,所以像
每當會話不再活性if (!isset($_SESSION['id'])) {
header("Location: destination.php");
exit;
}
將重定向。
您可以設置會話cookie是多久活着使用session.cookie_lifetime
ini_set("session.cookie_lifetime","3600"); //an hour
編輯:如果您由於安全問題(而不是方便,)使用接受的答案,如下面的評論定時會話了顯示,這是由客戶端控制,因此不安全。我從來沒有想到這是一個安全措施。
你必須刪除$ _SESSION ['id']周圍的引號 – 2010-06-18 10:18:16
即使你沒有投票答案,你的解決方案似乎更安全,我的問題是,你是否必須在每個頁面上設置會話超時?我想這是有道理的,因爲你會希望它每次重新啓動?其次,你是否必須爲每個頁面執行session_start來獲取會話數據,或者只需要一次就可以啓動它?謝謝 – nagates 2011-06-28 07:25:51
會話cookie生命週期中存在一些問題,最值得注意的是,它依賴*客戶端*來執行它。 Cookie的使用期限是爲了讓客戶清理無用的/過期的cookies,它不會與任何與安全相關的問題混淆。 – Jacco 2011-07-08 12:01:04
session_cache_expire(20);
session_start(); // NEVER FORGET TO START THE SESSION!!!
$inactive = 1200; //20 minutes *60
if(isset($_SESSION['start'])) {
$session_life = time() - $_SESSION['start'];
if($session_life > $inactive){
header("Location: user_logout.php");
}
}
$_SESSION['start'] = time();
if($_SESSION['valid_user'] != true){
header('Location: ../....php');
}else{
來源:http://www.daniweb.com/web-development/php/threads/124500
只是谷歌搜索你遇到的第一個答案,並將其粘貼到堆棧溢出不利於本網站的重點。此外,session_cache_expire()與會話的長度無關,因此您粘貼的答案有不正確的信息。 – 2013-04-23 15:37:46
@DavidBradbury默認情況下,cookie存儲session_id,如果cookie過期,則session_id無法在客戶端請求時訪問。 – 2016-12-27 05:44:17
只是先檢查會議是不是阿雷dy創建,如果不創建一個。在這裏我只設置它1分鐘。
<?php
if(!isset($_SESSION["timeout"])){
$_SESSION['timeout'] = time();
};
$st = $_SESSION['timeout'] + 60; //session time is 1 minute
?>
<?php
if(time() < $st){
echo 'Session will last 1 minute';
}
?>
<script type="text/javascript">
window.setTimeout("location=('timeout_session.htm');",900000);
</script>
在每一頁的頁眉中現場測試已經爲我工作(該網站是尚未製作)。它所屬的HTML頁面結束會話,並只是通知用戶需要重新登錄。這似乎比使用PHP邏輯更簡單。 我很想談談這個想法。任何陷阱我沒有看到它?
並非所有人都使用js – chuckieDub 2013-06-04 19:29:22
如果您使用同一站點打開了多個選項卡,則必須全部刷新才能創建一個活動,否則如果您繼續在1個選項卡中工作,其他人將在超時後顯示「timeout_session.htm」。非常令人沮喪,特別是如果「timeout_session.htm」未設置/銷燬會話。 =) – 2016-09-08 19:00:44
<?php
session_start();
if (time()<$_SESSION['time']+10){
$_SESSION['time'] = time();
echo "welcome old user";
}
else{
session_destroy();
session_start();
$_SESSION['time'] = time();
echo "welcome new user";
}
?>
<?php
session_start();
if($_SESSION['login'] != 'ok')
header('location: /dashboard.php?login=0');
if(isset($_SESSION['last-activity']) && time() - $_SESSION['last-activity'] > 600) {
// session inactive more than 10 min
header('location: /logout.php?timeout=1');
}
$_SESSION['last-activity'] = time(); // update last activity time stamp
if(time() - $_SESSION['created'] > 600) {
// session started more than 10 min ago
session_regenerate_id(true); // change session id and invalidate old session
$_SESSION['created'] = time(); // update creation time
}
?>
確保評論你的答案,並解釋你在哪裏以及如何添加超時。 – Rias 2015-04-21 21:20:19
Byterbit溶液是問題的,因爲:
用於cookie,通過session.cookie_lifetime設置過期是設計智能和安全智能的正確解決方案!爲了使會話過期,你可以使用session.gc_maxlifetime。
到期調用session_destroy,因爲他們可能已經過期,可能會產生不可預知的結果餅乾。
使php.ini中的變化也是一個有效的解決方案,但它使全球有效期爲這可能不是你真正想要的整個領域 - 某些頁面可能選擇保留一些餅乾比別人多。
的可能重複[我怎樣在30分鐘後到期PHP的會話?](http://stackoverflow.com/questions/520237/how-do-i-expire-a-php-session-after-30-分鐘) – Kzqai 2012-03-06 19:12:46