2012-03-27 69 views
0

我有寫文章的用戶,當他們離開那裏的計算機一段時間後回來然後提交一篇文章作者/ user_id被記錄爲NULL值。我假設會議即將到期。我有:發佈cookies /到期會話

ob_start(); 
session_start(); 

if(isset($_SESSION['user_id'])) { 
    $ext = time() + 31560000; 
    setcookie('name', $_SESSION['user_id'], $ext); 
} 

在登錄時用戶重定向的索引頁的頂部。

此外,這是當他們實際登錄會發生什麼:

$user_id = get_user_id($some_variable); // get's the user_id 
$username = get_username($some_variable); // get's username 

$_SESSION['user_id'] = $user_id; 

?> 
<script type="text/javascript"> 
    window.location = 'http://site.com/<?php echo $username; ?>'; 
</script> 
<?php 
exit(); 

這是正確配置,以及爲什麼會在用戶的會話中到期?他們不退出瀏覽器,它只是無所事事。這會導致什麼?

+1

檢查你的'php.ini'設置什麼[的session.gc_maxlifetime(http://www.php.net/manual/en/session.configuration。 php#ini.session.gc-maxlifetime)設置爲。默認值是1440秒或24分鐘。在這段時間之後,會有舊會話數據被清理的可能性。 – drew010 2012-03-27 03:42:15

+0

會議session.gc_maxlifetime = 1000000(隨機數)是正確的方式寫在php.ini? – Graham 2012-03-27 03:44:41

+0

是的,它會在全球範圍內做到這一點。您也可以使用腳本中的[ini_set](http://php.net/ini_set),但如果這樣做,則必須確保所有與會話交互的腳本使用相同的值。確保它的大小足夠滿足你的需求,但不是那麼大,最終會在服務器上產生大量的舊會話數據。 – drew010 2012-03-27 03:46:54

回答

1

我不知道你試圖實現與

if(isset($_SESSION['user_id'])) { 
    $ext = time() + 31560000; 
    setcookie('name', $_SESSION['user_id'], $ext); 
    } 

什麼,但不增加PHP的會話生存期,但只有創建有$ _SESSION [「user_ID的」]作爲cookie叫名字值並在創建後到期31560000秒。

如果你想改變你的一生會看到session.configuration

+0

我在看。我想要使​​用什麼特定的功能,以及如何編寫它?我想將它設置爲86400秒。只是把一個數字放在那裏。 – Graham 2012-03-27 03:47:54

+0

你可以使用ini_set函數http://www.php.net/manual/en/function.ini-set.php或直接修改你的php.ini。 ex'init_set('session.gc_maxlifetime',86400);' – grifos 2012-03-27 03:49:20