2015-08-26 114 views
0

努力與session_regenerate_id問題與我是否有問題的一些保證我正在做的。與PHP混淆session_regenerate_id

我工作的代碼非常類似於上php.net一個user post,但我已經簡化下來了這個問題,如下:

ini_set('session.save_handler', 'files'); 
session_save_path(dirname(__FILE__).'/tmp'); 

session_start(); 

$_SESSION['Test'] = "info"; 
$_SESSION['Test2'] = "more info"; 

$orig = session_id(); 

session_regenerate_id(); 

echo "Original session is ".$orig."<br>"; 
echo "Regen session is ".session_id()."<br>"; 

這輸出到屏幕

原始會話o9t1rhb2o9affn1ljisic1tas1
雷根會話gu9pkhi3loklr02r23m8lkvoh4

o9t1rhb2o9affn1ljisic1tas1的內容是

gu9pkhi3loklr02r23m8lkvoh4的內容是

測試| S:4: 「信息」; Test2的| S:9: 「更多信息」 ;

正如你所看到的只有新的會話包含任何數據,原來的是空的。我期待兩者都包含相同的數據。

我在這裏錯過了什麼,或者這是正確的行爲?

回答

0

Read The Manual

session_regenerate_id()將用新 更換當前會話ID,並保持當前會話的信息。

session_regenerate_id(true); // Delete old session (default) 

session_regenerate_id(false); // Keep old session 
+0

據我所知,會話ID將被替換,布爾決定了舊的會話是否被刪除或不。我收錄的鏈接顯示有人使用false來保持兩個會話進行,我說這不適合我,因爲第一個會話丟失了數據 –

+0

@neilwatson它不工作,因爲TRUE是默認值。您發佈的鏈接使用FALSE。當你想要相同的行爲時,使用FALSE。 – DanFromGermany

+0

不幸的是,我們可能不得不同意在php.net和[this](https:// books)上將函數的默認行爲作爲[rfc](https://wiki.php.net/rfc/precise_session_management) .google.co.uk /書?ID = noi76uKOJ5wC&PG = PA147&LPG = PA147&DQ = session_regenerate_id +默認+假源= BL&OTS = GgkhDWwM-J SIG = ryOA9_n3etYGiLITsTB91fG061Y&HL = EN&SA = X&VED = 0CEIQ6AEwBWoVChMImO72vNzLxwIVhmnbCh2cOwZh#v = onepage&q = session_regenerate_id%20default%20false&F =假)參考書說默認是假的 –