2016-11-28 65 views
0

非常簡單的實驗。我有一個index.php其中包含:如何使PHP會話持久化,並使用自定義會話ID?

if (!isset($_SESSION)) { 
    session_id(random_string()); 
    session_start(); 
} 

echo session_id(); 

random_string()只返回一個隨機的20個字符A-Z,A-Z,0-9字符串。

在重新加載該頁面,它會永遠產生一個新的會話ID,因爲沒有那個if語句之前session_start()一個電話,和(恢復)$_SESSION超級全球不存在。

但是,如果我把到session_start()呼叫在腳本的頂部,我失去了我的機會來指定自定義會話ID,因爲設置自定義ID有調用session_start()之前發生

我只是無法弄清楚這一點。雞/蛋問題。那麼,我如何成功實現一個自定義會話ID,這將保持頁面加載之間的超級全局活動?

+0

PHP會話是臭名昭着的不可靠的。最好爲會話使用數據庫。 – khuderm

+0

那麼,你想保持相同的會話ID,直到瀏覽器關閉或每個用戶? – Perumal

回答

0

藉助文件系統和數據庫,您可以在整個頁面中擁有自己的自定義會話ID。我已經寫了下面的代碼通過使用文件系統方法的所有頁面跟蹤同一會話ID:

if(filesize('session_track.txt') === 0) { 
    file_put_contents('session_track.txt', random_string()); 
} 

$session_id = file_get_contents('session_track.txt'); 
session_id($session_id); 
session_start(); 

// Here is the conditional statement, in case you need to regenerate your custom session id again 
$regenerate_custom_session_id = false; // if need, set it to true. 

// This code depends on your requirements. I just mentioned this conditional statement for your understanding to make it logically work 
if($regenerate_custom_session_id === true) { 
    file_put_contents('session_track.txt', ''); 
} 

我不知道這個代碼是多麼有效。我剛剛分享了我的想法,使其工作。