如何設置一個無脂框架會話在持續時間(例如5分鐘)不活動之後過期?我的網絡應用程序保持打開狀態,直到用戶註銷。無脂框架會話過期
Q
無脂框架會話過期
0
A
回答
1
首先您需要了解PHP會話garbage collector的行爲。默認情況下,它每100次請求(出於性能目的)隨機觸發,查找過期會話文件(默認:1440s)並將其刪除。
此外,您還需要了解一些Linux發行版(例如Debian)disable這個垃圾收集器並將其替換爲它們自己的cron作業。
你可以開始檢查你的PHP配置:
foreach (['gc_probability','gc_divisor','gc_maxlifetime'] as $k)
echo $k,'=',ini_get("session.$k"),'<br>';
如果GC概率爲0,會議文件永遠不會被刪除(或者可以通過在Debian cron作業被刪除)。如果它不是0,但是很低(例如1/100),會話文件將被刪除一段時間(嘗試刷新頁面100次)。
理論上,您可以將概率設置爲1(gc_probability = gc_divisor = 1),以便在會話文件過期後立即刪除會話文件。這將適用於流量較小的小應用,但會影響較大應用的性能(想象一下,GC需要在每個請求上掃描1000個或更多會話文件)。
處理這個問題的最清潔和最便攜的方式是自己過期會話。每當您加載用戶會話數據時,請檢查上次它在這裏並清除會話數據是否已過期。
這裏有一個小例子:
$f3->TIMEOUT=7200;// define session timeout here (in seconds)
ini_set('session.gc_maxlifetime',$f3->TIMEOUT);// see note (*) below
$f3->route('GET|POST|DELETE /session',function($f3){
// load session data
$data=&$f3->ref('SESSION.data');
// sign in on POST requests
if ($f3->VERB==='POST') {
$data=['user'=>'John','stamp'=>time()];
$f3->reroute();
}
// sign out on DELETE requests
if ($f3->VERB==='DELETE') {
// sign out
$data=NULL;
$f3->reroute();
}
// check if session has expired
if (is_array($data) && time()>$data['stamp']+$f3->TIMEOUT) {
$data=NULL;
}
// check if user is authenticated
if (is_array($data)) {
echo 'Welcome ',$data['user'],' last time we\'ve seen you was ',date(DATE_W3C,$data['stamp']);
echo '<form action="" method="post"><button>Sign out</button><input type="hidden" name="_method" value="DELETE"/></form>';
$data['stamp']=time();// update session stamp
} else
echo 'You\'re not authenticated';
echo '<form action="" method="post"><button>Authenticate as `John`</button></form>';
});
當然,你最好換這一切的邏輯在一個專用的類。
(*)PHP GC maxlifetime應該不低於$f3->TIMEOUT
,否則會干擾它。假設$f3->TIMEOUT
等於7200,並且session.gc_maxlifetime
設置爲1440(默認值),那麼您的用戶會話在1440和7200之間可能會過期。
相關問題
- 1. 無脂框架會話變量無法從另一個方法
- 2. 會話在框架中過期
- 3. zend框架中的過期會話2
- 4. 通過WCF無會話同步框架
- 5. 在無脂框架中加載佈局
- 6. Backbone.js的和無脂肪的框架:約
- 7. 無脂框架:F3自動加載器
- 8. 在無脂框架中的驗證碼
- 9. 無脂框架變化$ f3變量名
- 10. 僅通過cli工作的無脂框架
- 11. 機架會話重置/過期
- 12. 如果PHP/Yii框架會話已過期,請清除緩存
- 13. NodeJS - 無狀態會話的框架?
- 14. 無脂框架重定向到無效url
- 15. 無脂肪框架+ JQuery的AJAX GET =無響應
- 16. Django會話過期
- 17. sfGuardUser - 會話過期
- 18. 會話未過期?
- 19. 使會話過期
- 20. Firebase會話過期
- 21. WKWebView會話過期
- 22. Struts2會話過期
- 23. 框架會話問題struts2
- 24. zend框架失去會話
- 25. 播放框架空會話
- 26. 會話過期或無效(Ruby databasedotcom gem)
- 27. SuiteCRM - 無法登錄 - 會話已過期
- 28. ASP.NET會話不會過期
- 29. 不含脂肪框架入門錯誤
- 30. 路由在不含脂肪框架
是否更容易限制會話Cookie生存期?即'$ f3-> set('JAR.expire',strtotime('+ 5分鐘'));' – ikkez