2014-03-26 49 views
0

我想設置session.gc_maxlifetime。但超時的值本身在會話中。 我嘗試使用下面的代碼,但它沒有工作。問題與session_start和session.gc_maxlifetime

session_start(); 

//Do some database and session operations 

ini_set('session.gc_maxlifetime', $_SESSION['timeout']); 

session_start(); 
+1

你有一個動態更改php會話超時?爲什麼? – Latheesan

+0

長時間處理後,我從數據庫中獲取超時秒數。 –

+0

數據庫超時與php會話超時有什麼關係?你確定你沒有得到最大執行超時?無論如何,你爲什麼不在'php.ini'全局設置相應的超時時間呢? – Latheesan

回答

0

如果您正在試圖通過您的會話超時設置的session.gc_maxlifetime,我想這種做法是完全錯誤的,

這是因爲會話設置應在會議開始前進行定義。

嘗試這個 -

$timeout=$_SESSION['timeout'] 

$old_session_id = session_id(); 

# write and close current session 
session_write_close(); 


ini_set('session.gc_maxlifetime', $timeout); 

# now we can switch the session over, capturing the old session name 
$old_session_name = session_name($session_name); 
session_id($session_id); 
session_start(); 

# get the desired session data 
$session_data = $_SESSION; 
+0

我在應用程序中從任何其他應用程序獲取$ _SESSION ['timeout']。 –

+0

但這兩個應用程序的會話都是一樣的!不是嗎?好。我正在編輯我的答案,嘗試這樣的事情。也許,這應該做到這一點。等待。 – sunny

+0

好的Rakesh。我編輯了我的答案,試試看。 – sunny

0

我一直在使用下面的代碼來實現這一點。

$arrMixTempSession = $_SESSION; 
session_destroy(); 

ini_set('session.gc_maxlifetime', $_SESSION['timeout'] * 60); 
session_start(); 

$_SESSION = $arrMixTempSession;