2010-09-05 84 views
2

有沒有人有任何想法,爲什麼這不起作用?強制要求會話ID

if(isset($_POST['PHPSESSID'])) { 
session_id($_POST['PHPSESSID']); 
session_start(); 
var_dump($_SESSION); 
} 

var_dump($ _ SESSION);永遠是空的!它應該加載的東西!是否有防止強制會話ID的設置?自動啓動未啓用。

+0

你容易受到會話劫持btw。 – RobertPitt 2010-09-05 15:31:51

+0

@RobertPitt:請詳細說明 – VolkerK 2010-09-05 17:45:34

+1

,如果我從另一位會員那裏得到session_id,我可以通過POST注入並使用另一個成員的會話,訪問我不應該能夠訪問的數據! – RobertPitt 2010-09-05 18:28:56

回答

1

您發佈的代碼是正確的。然而,你可能不會看到在您的會話變量的幾個原因:

  • $_POST['PHPSESSID']未設置
  • $_POST['PHPSESSID']包含非數字字符
  • $_POST['PHPSESSID']並不是指一個人口會話ID
  • session_start()呼叫之前,被稱爲以session_id

如果沒有這些應用,我不知道問題是什麼,但爲什麼不嘗試使用session_name()(這是專爲你想要做的)而不是session_id

+0

謝謝。該變量已設置,因爲if(isset())塊中的var_dump正在發生,所以我知道這是返回true。 「非數字」的意思是「非字母數字?」你能解釋如何使用session_name()來做到這一點嗎? – 2010-09-05 15:33:26

+0

http://php.net/manual/en/function.session-name.php – RobertPitt 2010-09-05 15:37:24

+0

我的理解,通過鏈接確認,session_name()是會話cookie的名稱,但session_id()是唯一值。我已經確認session_name()的值是「PHPSESSID」(默認值),因此無論是硬編碼還是使用該函數進行檢索,我都沒有看到它會如何改變? – 2010-09-05 15:40:57

0

$_POST['PHPSESSID']一定是錯誤的:

根據會話處理器,並不是所有字符都會話ID內進行。例如,文件會話處理器只允許字符範圍A-Z A-Z 0-9,(逗號)和 - (負)

檢查其值。如果更改了會話處理程序,則必須僅爲此特定會話處理程序使用允許的字符。


資源:

+0

$ _POST ['PHPSESSID']以「88rbfemtnma9padi34kfm7imk0」的形式出現。 session.save_handler是「文件」這讓我發瘋。我可以確認會話ID存在,因爲在另一個瀏覽器中,我正在執行var_dump(session_id()),它返回通過請求進入的確切值。 – 2010-09-05 15:50:10

+0

你的代碼中的會話是否被破壞? – 2010-09-05 15:58:08

-1

有與會話保存路徑的問題。它沒有正確設置,所以我可以猜測PHP依靠瀏覽器cookie創建會話而不是會話保存路徑中的文件。