2010-09-05 70 views
2

我無法強制會話重新啓動PHP。這裏的問題:PHP session_id()不接受現有會話ID

我可以讓我的會話ID與session_id(),將它複製,並添加到我的腳本的頂部:

session_id('the_session_id'); 
session_start(); 

當我打開一個新的瀏覽器,來自其他會話瀏覽器不結轉。我可以檢查哪些設置?

+0

「當我打開一個新的瀏覽器」 - 你的意思是如果你有FF然後打開IE? – 2010-09-05 00:28:38

+0

你是否找到了解決這個問題的解決方案,因爲我需要與我的會話相同的東西? – 2011-05-25 14:25:24

回答

0

原因:

如果你關閉瀏覽器窗口,然後再次打開它,然後在這一刻第二屆開始用不同的ID,如果使用的Web應用程序有一些基於會話的認證系統的用戶必須重新登錄。同時用戶必須註銷兩次!

解決方案:

此功能將使用會話ID真正的cookie,並與每一個腳本執行更新的到期時間。到期等於PHP指令「gc_maxlifetime」(默認)或每個自定義值。所以,把這個函數放到你的PHP文件中。我們將需要它。現在

<?php 

// $expire = the time in seconds until a session have to expire 
function start_session($expire = 0) 
{ 
    if ($expire == 0) 
     $expire = ini_get("session.gc_maxlifetime"); 
    else 
     ini_set("session.gc_maxlifetime", $expire); 

    if (empty($_COOKIE['PHPSESSID'])) 
    { 
     session_set_cookie_params($expire); 
     session_start(); 
    } 
    else 
    { 
     session_start(); 
     setcookie("PHPSESSID", session_id(), time() + $expire); 
    } 
} 

?> 

,在你的頁面,在那裏你會發出session_id('the_session_id');session_start();頂部,去掉那些線,並開始與下面這段代碼會:

與由給定的到期時間啓動會話PHP配置

start_session(); 

啓動一個會話,將在1小時內到期:

start_session(3600); 
+0

謝謝。讓我對自己在做什麼更具體些,因爲我認爲它有所作爲。我正在使用Flash上​​傳器,當Flash插件執行PHP上傳腳本時,會話中斷,我得到了302.因此,我將PHPSESSID作爲後備參數傳遞給Flash請求,並且在每個頁面上都有: if(isset($ _ POST ['PHPSESSID'])){ session_id($ _ POST ['PHPSESSID']); session_start(); } 但是,當我轉儲$ _SESSION,它總是空的時,會話ID分配在該塊。 它似乎在大多數服務器上工作正常。這種技術是否被任何php.ini設置阻止? – 2010-09-05 03:46:27