日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 默认站点!

默认站点

當前位置: 首頁 >

php sessionid 重复,php_ session_id 限制同一用户同时登录

發(fā)布時間:2023/12/3 34 豆豆
默认站点 收集整理的這篇文章主要介紹了 php sessionid 重复,php_ session_id 限制同一用户同时登录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

出于信息安全的考慮,希望給每個能進入系統的人員一個賬戶,而不是所有人共用一個賬戶,并且一個賬戶同時只能一人登陸。剛開始的做法是登陸加鎖,當用戶登陸之后,對此用戶進行標記,若此用戶未下線狀態(tài)下進行第二次登陸嘗試,則禁止其登陸。這樣做就解決了單賬戶多用戶同時登陸的問題,但是實際操作中,卻遇到了更大的問題:用戶登陸過程中對其進行了加鎖,則用戶離開時就必須要進行解鎖操作,而很多用戶離開網站的習慣是直接點擊瀏覽器的關閉按鈕,這就導致無法解鎖,最終導致用戶正常登陸也受到限制。

那么如何友好的限制用戶賬戶登陸的呢?我們首先分析一下PHP是如何識別用戶是否登陸的。由于HTTP協議無狀態(tài)性的特點,我們無法通過它對用戶進行識別。一般來說,對用戶的識別主要通過cookie或session,它們之前最大的不同是cookie數據由客戶端存儲,每次向服務端發(fā)送請求時,客戶端把有效的cookie隨請求發(fā)送到服務端,而session數據由服務端存儲,服務端可以根據客戶端發(fā)送的特定cookie值來判定這些請求是否屬于同一請求。我們這樣對用戶進行登陸檢測:public?function?login(Request?$request)

{

$dl?=?$request?->input('dl','');

$password?=?$request?->?input('password','');

if($dl?==?''){

return?redirect('/')->with('danger','登錄帳號或密碼錯誤!');

}

if($password?==?''){

return?redirect('/')->with('danger','登錄帳號或密碼錯誤!');

}

$userinfo?=?User::where('dl',$dl)->first();

//?判斷用戶帳號是否存在

if(empty($userinfo)){

return?redirect('/')->with('danger','您輸入的帳號不存在!');

}

//?判斷密碼是否正確

if(md5($password)?!=?$userinfo['password']){

return?redirect('/')->with('danger','登錄帳號或密碼錯誤!');

}

return?redirect('/userinfo');

}

顯而易見,上面的代碼并不能實現我們想要的效果。想要達到我們想要的效果,我們只需要在上面代碼基礎上,再加一層session_id的驗證就可以了。用戶在登錄時儲本次會話的session id,當用戶再次登錄時,首先刪除之前用戶的session id,再把本次登陸的session id保存起來,這樣一來,原來的用戶就會被新用戶擠下線。public?function?login(Request?$request)

{

$dl?=?$request?->input('dl','');

$password?=?$request?->?input('password','');

if($dl?==?''){

return?redirect('/')->with('danger','登錄帳號或密碼錯誤!');

}

if($password?==?''){

return?redirect('/')->with('danger','登錄帳號或密碼錯誤!');

}

$userinfo?=?User::where('dl',$dl)->first();

//?判斷用戶帳號是否存在

if(empty($userinfo)){

return?redirect('/')->with('danger','您輸入的帳號不存在!');

}

//?判斷密碼是否正確

if(md5($password)?!=?$userinfo['password']){

return?redirect('/')->with('danger','登錄帳號或密碼錯誤!');

}

//用戶登陸限制

$session_id?=?Session::getId();

if($userinfo['session_id']?!=?$session_id){

//??session_id?其實就是?session?文件名,當然我是以?Laravel?框架為例,不同框架可能不一樣。

empty($userinfo['session_id'])???''?:?unlink(storage_path().'/framework/sessions/'.$userinfo['session_id'])?;

Cache::put('login_error',?'您的帳號在異地登錄,非本人操作請及時修改密碼。',?3);

User::where('uid',$userinfo['uid'])->update(['session_id'=>$session_id]);

}

return?redirect('/userinfo');

}

總結

以上是默认站点為你收集整理的php sessionid 重复,php_ session_id 限制同一用户同时登录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得默认站点網站內容還不錯,歡迎將默认站点推薦給好友。