[英]How to update user sessions in PHP?
當用戶登錄到我的網站時,我會獲取他們的所有用戶信息,並將其存儲在名為user_info
的會話中。 這樣一來,我不必進行連續的數據庫查找就可以獲取幾乎每個頁面上所需的有關用戶的通用信息。 var轉儲時,用戶信息會話如下所示:
array(17) {
["user_id"]=>
string(7) "1165771"
["username"]=>
string(2) "Jake"
["who"]=>
string(1) "1"
["seeking"]=>
string(1) "2"
["orientation"]=>
string(1) "1"
["dob"]=>
string(10) "1985-07-08"
["zip"]=>
string(5) "25140"
["email"]=>
string(17) "foo@bar.com"
["account_status"]=>
string(1) "1"
["role"]=>
string(1) "1"
["paused"]=>
string(1) "0"
["latitude"]=>
string(11) "37.89955100"
["longitude"]=>
string(12) "-81.52641100"
["region"]=>
string(2) "WV"
["city"]=>
string(5) "NAOMA"
["avatar"]=>
string(21) "1165771_50c6816a8fad1"
["email_setting"]=>
string(1) "1"
}
現在有一個“帳戶設置”頁面,用戶可以在其中更新一些信息。 因此,例如,如果他們更改了用戶名,我將執行此操作以更新其會話,以使其現在包含新值:
$_SESSION['user_info']['username'] = 'NEW VALUE';
現在是問題所在。 如果我決定在管理面板中進行審核時禁止某個用戶,那么數據庫中的帳戶狀態將從1(表示有效)更新為2(表示禁止)。 但是要使此更改反映在他們的user_info會話中,我不能這樣做:
$_SESSION['user_info']['account_status'] = 2;
因為它將僅更新我的計算機上的用戶信息,而不是更新他/她計算機上的用戶會話。 即使在技術上被禁止,他們仍可以繼續使用該網站,直到他們注銷並嘗試重新登錄。
然后它們將被阻止輸入,因為為使SQL查詢中的登錄返回true,除了正確獲取憑據外,用戶還必須具有1的帳戶狀態。
更改用戶帳戶后,如何更新單個用戶的會話。
我如何從服務器上完全刪除用戶的會話,以便他們立即注銷。
據我所知,如果您需要使此更改立即生效,則必須檢查每個頁面上的用戶狀態,並且如果該用戶被禁止,請采取適當的措施。
這個答案建議您更改文件,但即使是作者也不建議這樣做。
How can I update the session of an individual user when I make a change to their account.
就我個人而言,我只是切換到數據庫會話-在代碼的開頭對數據庫進行一次輪詢,以將所有用戶數據放入變量中。
這樣,如果在頁面更改期間管理員權限發生更改,則用戶將立即具有新的訪問級別。
How I can delete a user's session completely from my server so they are immediately logged out.
然后,您還可以從數據庫中“刪除”會話-強制注銷用戶。
只需在每次頁面加載時為會話添加檢查。 例如,有一個db表,您可以在其中臨時寫入活動會話。 如果用戶重新加載,並且表中沒有此類條目,則他必須再次登錄並重寫會話。 如果他注銷了,或者您是hav3踢他出去的,則只需刪除或修改該條目。 這也可以成為經典工具-目前,無論用戶在使用sit3 ecc ...
一種替代解決方案(而不是直接斷開連接)是在會話中添加時間戳,並每隔xx分鍾刷新一次(如果會話數據早於xx分鍾,請執行數據庫查詢)。
這樣,被阻止的用戶不會立即被踢出,但是您可以控制時間並減少數據庫查詢的數量(每xx分鍾而不是每個請求)。
但是,我首先要檢查對用戶數據庫的查詢是否真的產生了很大的影響。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.