2016-06-08 55 views
0

我在這裏有一個小的情況,但我想嘗試並確保以正確的方式處理此問題。我應該使用會話變量還是全局超級變量

我有一個網絡應用程序,由幾家商店使用。 每家商店都通過htaccess和htpasswd進行驗證,以連接到正確的數據庫。 這部分效果很好!

每家店都有多名員工,但每位員工都使用一臺獨立的計算機/工作站。

因此,它會登錄,獲得認證,連接到適當的數據庫,然後加載登錄頁面。

在登錄頁面,用戶使用名稱和密碼登錄到應用程序,他們很好。 此時,我正在將用戶信息(UserID,安全級別等)加載到會話中。 我的問題的一部分是垃圾收集,因爲每隔一段時間會話變量就會丟失。 每個頁面的會話開始都是第一件事,所以我想象一下,在一小時左右的閒置狀態下,會話被垃圾收集器和垃圾收集器收集,它就消失了。

我正忙着將用戶信息加載到$GLOBALS超變量中以避免由於不活動而丟失會話。 現在,我意識到有一些方法可以在PHP中延遲/停止垃圾回收器,但是在我看來,如果使用全局範圍,則無需額外編碼或配置PHP。 我假設只要每個用戶在他們自己的機器上訪問使用$GLOBALS的網站只適用於每個用戶,我是否正確?

+1

我認爲你對「$ GLOBALS」有什麼誤解。這個[answer](http://stackoverflow.com/a/14848246/1022914)提供了關於'$ GLOBALS'和'$ _SESSION'之間區別的簡短說明。 – Mikey

+0

我明白這一點。但我的觀點是,儘管$ GLOBALS仍然與一個用戶而不是應用程序綁定在一起。隨着每個用戶從一臺單獨的計算機登錄到站點,那麼$ GLOBAL變量不應該像會話變量那樣工作,就像垃圾收集事件的發生一樣? – phpnoobie

+2

就是這樣的:全局變量**不像**會話變量。如果你創建一個全局變量,它會在你改變/退出你的腳本的時候像普通變量一樣死亡,而一個會話變量在它到期之前仍然保持活躍或者你強行取消它。一般經驗法則:從不使用全局變量。 – Mikey

回答

-2

您可以使用緩存。它可以幫助你永遠保持用戶登錄,就像facebook一樣。

+0

不想讓他們無限期登錄。只是想通過垃圾收集的PHP,而不必跳過修改PHP配置或寫更多的代碼的箍。 – phpnoobie

2

認爲你對會話和全局變量有一個普遍的誤解。

全局變量是保持共同爲整個 應用......他們的價值可以在整個應用程序 使用,而會話變量是保持共同爲 整個應用程序,但對於一個特定的用戶變量的變量。它們也可以在整個應用程序中使用 ...但是當特定用戶會話結束時它們會死亡。

https://stackoverflow.com/a/14848246/1022914

我建議使用會話雖然。根據存儲在數據庫中的用戶數據檢查用戶詳細信息。如果它通過身份驗證,請創建包含用戶數據的會話變量,以便在您的頁面中使用。這使得事情變得更容易

+0

但正如我所說的,用戶保持登錄8至10小時,有時非活動期非常長。當這種情況發生時,垃圾收集者來了。 – phpnoobie

+1

然後,您可能需要查看適當的會話和Cookie。會話在瀏覽器關閉時結束。所以你可以編寫一個函數來處理不活動,並且當它發生時該怎麼做 –

+0

這個[answer](http://stackoverflow.com/a/1270960/1022914)可能對如何處理不活動有用。 – Mikey