我在這裏是一個難題。我有一個使用Google OAuth的應用程序,需求是增加用戶保持登錄的時間。使用PHP增加登錄會話
在由前端控制器(index.php)調用的腳本開始處,有一條if語句檢查是否存在全局變量$ _SESSION。
if(!isset($_SESSION)) @session_start();
這很好,因爲我可以看到登錄用戶的會話數據。現在我不知道如何解決這個問題,因爲在會話中保存的谷歌令牌數據也碰巧有一個值爲3299(一小時)的expires_in
鍵。
我的分析是,一小時後從谷歌會話超時,並控制這樣,它擴展我應該看看更新代碼,通過谷歌認證到離線刷新令牌。我並不確定這個原因,因爲我至少可以在應用程序中控制會話的超時時間 - 我遇到的問題是如何部分。 。
下面的代碼片段,我寫的正上方@session_start電話:
if(isset($_SESSION)){
$sessionKeys = array(key1, key2,key3); //Keys that are destroyed on logout
$refreshLifetime = false;
foreach($sessionKeys as $key){
if(!empty($_SESSION[$key]){
$refreshLifetime = true;
}
}
if($refreshLifetime){
@setcookie(session_name(), session_id(), time() * 3600);
}
}
東西感覺不對這個代碼的處理會話用PHP有可能是所有的複雜性與不同如何一起工作系統會將PHP上的會話添加到該客戶端和服務器端會話處理中。
有人可以幫我提出一個想法,我可以解決這個問題,使應用程序可以有一個擴展的會話說5小時才超時?
編輯
我已經決定了應用程序會話保存路徑從/var/lib/php5
移動到應用程序本身的目錄。我通過將session.gc_maxlifetime
設置爲10分鐘來開始,看看我是否會被鎖定或重定向到登錄頁面,但我不是。
我加入,即使我還在猶豫閱讀enter link description here後和第一用戶音符貢獻似乎沒有使用高速緩存與gc_lifetime到期鏈接的cache_expire
設置。
如果我把它放在這裏,它應該和我爲session.gc_maxlifetime設置的一樣嗎?
ini_set('session.save_path', __DIR__ .'/../tmp');
ini_set('session.gc_maxlifetime', 300);
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 100);
session_cache_limiter('private');
session_cache_expire(300);
然而,正如我所期待的應用程序在5分鐘沒有動作之後被重定向到登錄頁面這沒有奏效。有沒有我丟失的東西,這個代碼是在調用session_start
的文件的頂部。
謝謝瑞安。我們的工作基於Scrum,對我來說這聽起來像是一個新功能。我可以提出這個建議,但與此同時,這個想法是將會話時間延長到X小時,而不是延長用戶白天的時間。儘管我已注意到你的建議。 – Maximum86