2010-05-17 40 views
0

UPDATE(新增的代碼,做讀/寫類)PHP會話只寫入部分信息表

更新:我已經註釋掉了在PHP行。 ini文件允許會話被寫入文件而不是數據庫,並且我將session_start()放在正確的位置上。所以我已經能夠排除其他地方的代碼。只有在使用數據庫存儲會話時纔會出現此問題,這是一項要求,所以如果有任何其他想法可以幫助我解決此問題,請告訴我。謝謝。


原貼: 我有困難,搞清楚發生了什麼事情就到這裏,希望有人能幫助我。

我一直在使用php,mysql將會話信息存儲在數據庫中。該應用程序只在本地主機,Vista上運行。在php.ini文件中,我註釋掉了「session.save_handler = files」這一行,並使用一個php類來處理會話的寫入/讀取等。

我的登錄過程是這樣的:通過登錄提交登錄憑證。 PHP。 login.php調用loginprocess.php。 loginprocess.php驗證用戶,如果有效開始一個新的會話並將數據添加到會話變量,那麼它將重定向到index.php。

這是問題所在。 loginprocess.php頁面有許多會話變量被設置爲$ _SESSION ['account_id'] = $ account_id;等等,但是當我去index.php並做一個var_dump($_SESSION)它只是說「array()爲空」。但是,如果我在loginprocess.php中執行var_dump($_SESSION),那麼在重定向行header("Location: ../index.php");之前,它會顯示會話變量中的所有數據。如果我查看存儲會話信息的數據庫,session_id字段,created_ts字段和expires字段中有數據,但session_data字段中沒有任何內容,過去,這是所有會話數據的字段被存儲。

我怎麼能夠在loginprocess.php中var_dump會話,但數據不存在於數據庫表中,它使用某種緩存?我清理了我的餅乾等等,但沒有改變。

爲什麼session_id被寫入表中,但實際的會話數據不是?

任何想法表示讚賞。謝謝。

+0

我們將不得不更多地瞭解您用於保存會話數據的過程。你說你正在將它存儲在數據庫中 - 你的會話如何設置讀/寫處理程序? – Johrn 2010-05-18 18:06:02

+0

我已經使用讀/寫的類對象更新了帖子。謝謝你的幫助。 – Ronedog 2010-05-18 20:16:07

回答

0

看看serialize()函數,並考慮在寫入數據庫之前使用它;和相應的unserialize()時讀取

+0

感謝您的回覆標記。在write()函數中,我用sql語句中的serialize($ session_data)替換了$ session_data,然後在read()函數中,我將return unserialize($ fields [「session_data」])替換爲返回值$ fields [ session_data是「];但仍然是同樣的事情。我把它放在錯誤的地方? – Ronedog 2010-05-17 23:25:13

1

要訪問PHP上的會話數據,您需要先使用session_start。

+0

你需要每個頁面的session_start – 2010-05-18 00:07:11

+0

在這個類中有一個session_start,每次創建對象時都會被實例化。我已經確定所有頁面都有一個實例化對象,但結果仍然相同。 – Ronedog 2010-05-18 01:15:11

+0

在調用header(location ...)之前,我遇到了會話變量被填充的問題。 它只是沒有工作,我即將得到堅果 - 然後我發現這在PHP幫助頁面上: <? session_start(); $ _SESSION ['mySession'] =「hello」; header(「Location:xpage.php」); exit(); //這句話做魔術 ?> 試試這個,讓我們知道。 乾杯。 – ronaldosantana 2010-05-18 01:35:02