我正在建立在線訂票網站。在這我做了以下事情:用戶搜索巴士座位號碼。該數據庫的座位號碼更新爲temp_seat_book = 'Y'
。如果他預訂門票付款,他的狀態將更新爲final_ticket_book = 'Y'
。現在我想要刪除temp_seat_book = 'Y'
但是 final_ticket_book = 'N'
的字段。爲此,我需要刪除10分鐘以上的session_ids和final_ticket_book = 'N'
。那麼我如何才能實現後臺工作?一段時間後取消會話
5
A
回答
9
而不是做對文件的搜索(這涉及到更多的I/O)等, 什麼是會話cookie:Session Cookie
一種更好的方式是存儲$ _SESSION變量中'最近的活動'的時間戳。
並更新每個請求的會話數據(包括自動定期ajax調用,如果有的話)。
比方說,你想10分鐘後取消設置會話,
if (isset($_SESSION['most_recent_activity']) &&
(time() - $_SESSION['most_recent_activity'] > 600)) {
//600 seconds = 10 minutes
session_destroy();
session_unset();
}
$_SESSION['most_recent_activity'] = time(); // the start of the session.
爲了避免這樣Session fixation攻擊:(會話固定是允許攻擊者劫持一個有效的用戶會話的攻擊)保持再生會話ID定期說5分鐘(我建議保持再生時間以及會話過期時間多一點)。更詳細的攻擊列表:attack list。
if (!isset($_SESSION['CREATED'])) {
$_SESSION['CREATED'] = time();
}
else if (time() - $_SESSION['CREATED'] > 600) {
session_regenerate_id(true);
$_SESSION['CREATED'] = time();
}
此外,確保session.gc-maxlifetime
被設置爲最大到期要使用時間。 你可以在你的php.ini直接做到這一點
ini_set('session.gc-maxlifetime', 600)
或者 設置。
並且還
session.cookie_lifetime指定cookie的以秒計的壽命被髮送給瀏覽器。
但是,銷燬會話必須在服務器端而不是客戶端處理。 將session.cookie_lifetime設置爲0會使會話的cookie以會話cookie的方式工作,即會話cookie僅在瀏覽器關閉之前有效。
雖然這個方法有點乏味,但它更優雅。
啊,找到我很久以前看過的鏈接了! :How do I expire a PHP session after 30 minutes?
3
標準PHP會話存儲在文件中。你可以實現一個簡單的shell腳本發現已沒有在10分鐘內被摸了會議文件:
find /path/to/session/dir/* -mmin -10
的grep可用於查找具有final_ticket_book會議文件=「N」的值存儲在其中:
grep -l 's:17:"final_ticket_book";s:1:"N";'
(-l標誌有grep吐出匹配的文件的名字)。
結合這兩個給你:
find /path/to/session/dir -mmin -10|xargs grep -l 's:17:"final_ticket_book";s:1:"N";'|xargs rm -f
相關問題
- 1. 一段時間後取消AsyncTask
- 2. 一段時間後取消未接電話
- 3. X小時後取消會話
- 4. 在某段時間後取消UILongPressGestureRecognizer
- 5. RadAjaxLoadingPanel在一段時間後消失
- 6. 圖層在一段時間後消失?
- 7. PHP會話在一段時間後過期
- 8. 如何在一段時間後自動銷燬Zend會話?
- 9. MYSQL會話在一段時間後過期休眠
- 10. 會話超時後獲取會話ID
- 11. JSMPP - EnquireLinkTimer,會話在長時間不活動後會消失
- 12. Parallel.ForEach在一段時間後會凍結
- 13. 如何在一段時間後取消鬧鐘? |安卓
- 14. 在一段時間後取消異步操作WinRT
- 15. 如何在一段時間後取消Android AsyncTask? (例如10秒)
- 16. 一段時間後取消網址連接
- 17. 如何在一段時間後取消方法?
- 18. 如何立即或在一段時間後取消/隱藏window.alert?
- 19. 在一段時間後取消選中切換按鈕
- 20. 如何在一段時間後取消某個功能?
- 21. Android:自動取消警報一段時間後或標誌
- 22. 如何在一段時間後取消goroutines
- 23. 某段時間後未設置會話[如何在一段時間後刪除數據]
- 24. 在拉拉維爾過了一段時間後會過期特殊會話
- 25. 有時,Vaadin不會在「會話超時」消息之後使會話無效
- 26. 如何在一段時間間隔後使CCSprite消失
- 27. 取消設置一個specefic會話中使用的會話ID
- 28. div出現後消失一段時間,並徘徊時apears ...
- 29. 怎樣一段時間後才執行命令,但有一個取消按鈕
- 30. Django會話剛剛登錄後會間歇性消失
只是有一個時間戳,並檢查它? – footy 2011-12-26 06:17:12
將不會包含'seat_status'的單個數據庫字段包含3個狀態之一更容易。 – 2011-12-26 06:19:23
可能你在這裏找到你的答案 http://stackoverflow.com/questions/520237/how-do-i-expire-a-php-session-after-30-minutes – 2011-12-26 06:23:46