PHP保持使用者登入狀態的方法
#1、將使用者訊息,例如一個['uid'=>123, 'username '=>'testuser']的數組,在序列化後變成字串,使用可逆加密演算法加密該字串,寫到一個Key為userinfo的COOKIE裡。
2、由於可逆加密演算法容易被解密,一旦加密的規則被別人猜測到以後,就可以輕易篡改這個COOKIE的內容,然後自行根據加密規則加密後偽造。
所以,我們另外加入一個infodig的COOKIE,是將以上的userinfo的COOKIE內容,加入salt後使用不可逆加密演算法產生散列,至於salt咱們可以自己定,總之要對外保密,不可逆演算法例如md5,甚至多次加鹽多次md5。
3、以上兩個COOKIE,為增強安全性,防止使用者被XSS攻擊後拿到,可以設定http-only屬性。
服務端判斷存在以上兩個COOKIE後
1、驗證infodig與userinfo是否相符(將userinfo的內容使用產生infodig的方法計算後,與COOKIE傳上來的infodig匹配是否一致)
2、infodig驗證通過後,使用解密演算法解密userinfo串,得到用戶訊息,如果用戶資訊裡的uid存在用戶表中,則寫SESSION,透過SESSION保持本次會話
總結:
使用COOKIE記錄使用者資訊是可行的(當然不建議把使用者敏感的東西存在COOKIE,例如郵箱、手機、甚至密碼,只記錄對登入有用的部分,例如uid、username等標識,以及nickname可能會在某些地方提升使用者體驗),可以確定的是,這個COOKIE對使用者可見,我們要做的就是兩點:
1、盡量讓使用者看不懂,而只有我們服務端自己認識(可逆加密演算法)
2、即使使用者看懂了,他也不能夠輕易的偽造(不可逆的散列演算法)
推薦教學:PHP影片教學
以上是php怎麼保持使用者登入狀態的詳細內容。更多資訊請關注PHP中文網其他相關文章!