2010-04-08 93 views
2

我通過在整個腳本中填充$ _SESSION - Array來分配會話變量。我的問題是,由於某些原因,並不是所有變量都可以在會話中使用。PHP不會在會話中存儲所有變量

這裏是我的代碼用於解釋此問題的縮短版:

session_start(); 

print_r($_SESSION); 

$_SESSION['lang']  = 'de'; 
$_SESSION['location_id'] = 11; 
$_SESSION['region_id'] = 1; 

$_SESSION['userid'] = 'eccbc87e4b5ce2fe28308fd9f2a7baf3'; 
$_SESSION['hash'] = 'dce57f1e3bc6fba32afab93b0c38b662'; 

print_r($_SESSION); 

第一次調用打印是這樣的:

Array 
(
) 
Array 
(
    [lang] => de 
    [location_id] => 11 
    [region_id] => 1 
    [userid] => eccbc87e4b5ce2fe28308fd9f2a7baf3 
    [hash] => dce57f1e3bc6fba32afab93b0c38b662 
) 

第二個呼叫打印:

Array 
(
    [lang] => de 
    [location_id] => 11 
    [region_id] => 1 
) 
Array 
(
    [lang] => de 
    [location_id] => 11 
    [region_id] => 1 
    [userid] => eccbc87e4b5ce2fe28308fd9f2a7baf3 
    [hash] => dce57f1e3bc6fba32afab93b0c38b662 
) 

如您所見,重要的登錄信息不會存儲在會話中。 有沒有人有一個想法,我的會議可能會出錯?謝謝你的回答!

+0

你碰巧在腳本的其他地方使用了名爲'$ userid'和'$ hash'的變量嗎? – 2010-04-08 19:19:07

+0

相同的調用是否發生在同一個腳本中?在第二次調用print_r之前,是否以任何方式取消設置Session變量?你是否使用可能使用相同散列進行用戶認證的組件或庫('userid'和'hash')? (確保你已經禁用全局變量) – Andreas 2010-04-08 19:22:05

+0

我使用了許多不同的腳本。但是第一個print_r在session_start()之後的第一個開頭,第二個print_r之後是exit() – 2010-04-08 19:34:26

回答

1

進一步擴展Pekka可能暗指的內容,如果您註冊了全局變量,那麼腳本中的會話變量和其他變量可能會與命名衝突。如果可能的話關閉全局變量或重命名你的變量,它們不會相互碰撞($ _SESSION'hash']和$ hash),看看會發生什麼。

+0

感謝您回答我的問題。我將變量重命名爲一些任意值,但沒有任何變化 – 2010-04-08 19:33:12

0

將這段代碼原封不動地粘貼到單個腳本中並運行多次。第二,第三,第四...時間應該會得到相同的結果。

<?php 
session_start(); 

print_r($_SESSION); 

$_SESSION['lang']  = 'de'; 
$_SESSION['location_id'] = 11; 
$_SESSION['region_id'] = 1; 

$_SESSION['userid'] = 'eccbc87e4b5ce2fe28308fd9f2a7baf3'; 
$_SESSION['hash'] = 'dce57f1e3bc6fba32afab93b0c38b662'; 

print_r($_SESSION); 
?> 

如果它有效,那麼你的腳本顯然有錯誤,你不會發布。在這種情況下,您應該提供更多代碼以便能夠幫助您。