2010-12-22 80 views
1

我有一個PHP應用程序,它依賴會話變量相當多。登錄後,用戶將被重定向到執行代碼的頁面,以根據用戶的身份設置會話變量負載。應用程序使用來自不同來源的數據,會話用於存儲ID號碼以查詢數據庫。PHP:替代SESSIONS

因此,當用戶轉到將查詢其資產管理系統的頁面時,他們將通過會話調用該特定數據庫的ID。

最近我遇到了很多會話變量的問題。有時在應用程序的生命週期中只會創建一個會話文件,有時每個會話請求都會生成一個新的會話ID(仍然無法找出原因!)。

我的問題是這樣的。有沒有替代使用會話變量?像全局或其他方式?

我對我在這裏的會話問題開一個問題 - PHP session variables not being maintaned

回答

2

另一種替代方法是將會話數據存儲在數據庫中,爲用戶提供cookie和session_id。這會讓你對會話有更多的控制。

+0

這聽起來不錯,但我遇到了問題,每個會話請求都會生成一個新的會話ID。所以如果我給他們一個會話ID,它很可能會改變或被覆蓋 – iamjonesy 2010-12-22 10:46:21

+0

其實這是一個cookie問題。在一個頁面上創建一個cookie,導航到另一個頁面,cookie不見了 – iamjonesy 2010-12-22 10:57:07

-1

的替代課程是餅乾(事實上,會話使用Cookie,通常可以實現)。但是,只有在您要存儲小型數據量時才應使用Cookie。

1

不,因爲每個用戶會話都應該有一個值,所以您需要某種會話機制。 PHP的會話對此很好。您可能只需要正確配置以滿足您的需求。

2

你可以使用一些其他的「會話」解決方案,但這需要你做更多的管道。

例如,您可以使用基於網址的會話,其中網站生成的每個網址都包含一個會話ID。這通常是網站的重新設計,並且唯一需要的時間是如果您需要在多個域中進行相同的會話,或者您想讓同一臺計算機在瀏覽器的不同窗口中運行不同的會話。

但在你的情況下,我會檢查爲什麼會話中斷,它可能是一個配置問題,或者你有其他東西,擰了會話文件。

我從未有過PHP會話任何麻煩,他們只是工作;)

0

會議似乎爲這個正確的解決方案。 一般會話的工作方式如下: 會話對象在服務器上創建並分配了一個ID。該ID通過cookie發送給瀏覽器並通過瀏覽器的請求發送到服務器,從而使服務器能夠從內存中獲取正確的會話對象。

你可能想看看你的會話是如何配置的。如果您保留「放鬆」會話,一個可能的原因可能是您在子域之間「跳躍」,並且僅爲一個子域設置會話cookie。另一個原因可能是您的會話過期時間過短。

0

Cookies是不是一個真正的選擇,特別是當用於登錄,因爲它們可以由用戶來改變,而只是會話包含存儲在計算機上的識別哈希一個cookie,並修改它不會得到他們很遠。

無論如何,會議工作。毫無疑問,您的問題是實施問題。我建議你花一些時間進行調試和測試,因爲實施替代方法會導致一個令人難以置信的更復雜的代碼 - 而且你不想這樣做,因爲會話已經給你帶來了麻煩。

0

對於在每次請求時重新創建的會話,您應嘗試調試由服務器發送給您的Cookie。 在這些cookie中檢查cookie域是否正確(並檢查cookie路徑)。

要調試Cookie,您可以使用Web開發者工具欄來顯示頁面加載後哪些cookie處於活動狀態。但最好的工具是Live Http頭文件,檢查服務器發送的真實頭文件,在那裏你會發現真正的cookie內容,如果cookie域中存在不匹配的情況(例如 - 但大部分時間都是這樣),您的瀏覽器不會爲您的網站存儲此Cookie。

如果瀏覽器忽略一個cookie,在下一個頁面請求PHP構建另一個會話等

如果你不能讓你cooki系統的正常工作,你可以跟蹤跟蹤會話標識在PHP中,這是舊的方式使用PHPSESSID的永久獲取和/或後置參數。 你需要--enable-rans-id你的PHP編譯(在phpinfo頁面上查看)http://www.php.net/manual/en/session.idpassing.php