2017-08-03 117 views
0

我只是在我的代碼中使用會話變量。我不會使用Cookie開始任何活動。我只是做session_start()並對變量進行操作。 但是在一段時間(大約30分鐘)結束的時候,會議進行中。如果我做print_r($ _ SESSION)會話是無效的。Php會話變量銷燬此說明

我試過將session.gc_maxlifetime設置爲7200(2小時),但會話在不到30分鐘內就被銷燬了。

我該如何解決這個問題?這是正常的?如果我關閉瀏覽器或將語句/指令提供給session_destroy,會不會僅銷燬該會話?

+1

作爲默認的生命週期是24分鐘。我猜你已經改變了錯誤的'php.ini'文件。通常有兩個用於Apache下的PHP和一個用於CLI。用'<?php phpinfo();?>'做一個快速頁面,並檢查你的真實'php.ini'文件的位置,並確保你正在更改正確的文件 – RiggsFolly

+0

此外,在'phpinfo()'輸出,你實際上可以看到'session.gc_maxlifetime'的配置值在'session'部分下面。 – Phylogenesis

+0

的phpinfo後(): [PHP版本7.1.7], [服務器API =>的Litespeed V6.11], [加載的配置文件=> /opt/alt/php71/etc/php.ini] [解析附加的.ini文件=> /opt/alt/php71/link/conf/alt_php.ini], [session.cookie_lifetime => 0], [session.gc_maxlifetime => 7200] –

回答

0

會話變量用於保存信息,直到瀏覽器關閉。我不太清楚你想在你的項目中實現什麼,因爲你還沒有發佈任何代碼。 一些簡單的事情很簡單,就像在你的PHP腳本的最後或者session_start()的開頭,在任何html標籤可能會混淆你的代碼之前都沒有放上session_write_close();

+0

我只是希望會話不會在沒有指令的情況下銷燬或關閉瀏覽器。而我所證實的是,這個會議在一段時間後沒有任何指示就吹走了。考慮到我不使用cookies。我不需要任何代碼來表明我的疑問。我只在每個頁面中使用session_start(),並使用symply session vars來控制用戶是否登錄。 –

0

默認超時時間爲24分鐘。

除了php.ini以外,您可以在代碼中進行更改。從這個答案

// server should keep session data for AT LEAST 1 hour 
ini_set('session.gc_maxlifetime', 3600); 

// each client should remember their session id for EXACTLY 1 hour 
session_set_cookie_params(3600); 

session_start(); // ready to go! 

:你可以試試這個How to change the session timeout in PHP?


的一篇文章就可以了:

https://bytes.com/topic/php/insights/889606-setting-timeout-php-sessions

這使得我已經適應到2個小時的代碼。它

session_start(); 
$timeout = 7200; // Number of seconds until it times out. 

// Check if the timeout field exists. 
if(isset($_SESSION['timeout'])) { 
    // See if the number of seconds since the last 
    // visit is larger than the timeout period. 
    $duration = time() - (int)$_SESSION['timeout']; 
    if($duration > $timeout) { 
     // Destroy the session and restart it. 
     session_destroy(); 
     session_start(); 
    } 
} 

// Update the timout field with the current time. 
$_SESSION['timeout'] = time(); 

php.net頁:

http://php.net/manual/en/function.session-set-cookie-params.php

其他堆棧答案進行驗證(一些高評級):

PHP sessions default timeout
How do I expire a PHP session after 30 minutes?

+0

所以我必須把「ini_set('session.gc_maxlifetime',3600);」在我有session_start()的每個頁面中?並在session_start()之前? 像這樣:<?php ini_set('session.gc_maxlifetime',3600);在session_start(); ?> –

+0

閱讀了我的最後一個鏈接,這裏有很好的信息。具體來說,我只是簡單地將它包含在你的php頭文件中。 – Madivad