2011-08-29 67 views
2

我在我的代碼中有一個奇怪的問題,我實際上無法解釋,它對我沒有任何邏輯意義。當一個人成功登錄我的網站並將他們重定向到index.php頁面時,我正在設置一個名爲$_SESSION['user_id']的會話變量。這工作正常,會話正常工作,但一旦我刷新頁面,會話中的值消失,但我不明白爲什麼。php session/substr問題

$long_user_id = $_SESSION['user_id']; 

$user_id = substr($long_user_id, 0, -3); 

任何人都可以看到什麼問題在這裏?我認爲名爲user_id的Session變量將保持不變,但由於某種原因,在第二次頁面加載後它是空的。

在此先感謝

編輯:我沒有張貼我所有的代碼,我通過不提的是,我在每一頁上使用session_start();犯了一個錯誤。我還想確認,如果我註釋掉頁面中的substr部分代碼,代碼將起作用。

+0

你是什麼意思的「會話中的價值消失」?取消設置?空的?改變了嗎?你有register_globals = on嗎? – str

+0

我的意思是它消失了,如果我回顯「long_user_id」的值沒有什麼可顯示的。該會話仍然存在,因爲如果它沒有我的代碼會自動將我重定向到登錄頁面,但它不會。該值只是NULL(可能,我不確定!) – James

+0

什麼是您的PHP版本?你使用'session_register()'或'register_globals'嗎?你可以將'error_reporting'提升到最高級別'ini_set('display_errors',1); error_reporting(〜0);'? – hakre

回答

1

這個問題的「解決方案」沒有什麼意義。出於某種奇怪的原因,$ _SESSION ['user_id'];實際上是作爲$ user_id存儲在php腳本中的。我無法解釋這一點,我不知道它爲什麼這樣做,但這意味着當我調整$ user_id變量時,會導致會話出現問題,從而使它「消失」,正如我前面所述。

只需更改變量名稱以確保它們不會與會話名稱發生衝突,即可解決此問題。

1

您總是必須通過session_start()開始並保持一個會話 - 否則您的會話將消失。請注意,因此您必須在每頁上撥打session_start()

+0

我在原文中添加了「編輯:」。我正在使用session_start()。我不認爲有人會認爲我忘記了,因爲這部分代碼是造成問題的部分 – James

+1

有一個會話自動啓動php配置設置IIRC。如果設置了,則不必使用'session_start()'。 – hakre

+0

您是否激活了'error_reporting(E_ALL | E_STRICT)'?你可能會在session_start()之前發送一些東西,並且一個字節就足以產生問題。你可以將你的代碼粘貼到pastebin中嗎?也許我們發現另一個問題。另外,檢查你的php.ini會話相關的錯誤爲session.autostart和類似的問題。 – Lars