網站的下次自動登入功能的實現方法
我告訴你開源php框架的symfony中的一個很有名的擴充套件sfGuard是怎麼做的,可能可以給你提供一些思路:
首先你的資料庫需要一個rememberkey表:它包含了一下三個欄位:
user_id, remember_key(string(32),unique), ip_address, 當然還有兩個時間欄位created_at和updated_at那幾乎是必須有的就不提了。
如果使用者在登入的時候勾選了remember me
那麼用md5一個隨機值,比如timestamp + rand(0, 9999999)產生一個remember_key。因為隨機的變化還是很大的,所以remember_key幾乎不可能會出重複的key。
然後把此key在客戶端cookie和資料庫各存放一份,cookie的存放時間就是你記住密碼設定的時間長度,另外ip要記在資料庫裡面。
如果使用者點選退出,那麼在刪除session的同時,也把cookie裡的remember_key以及資料庫對應的key那條記錄刪除,當然為了防止垃圾資料越來越多,此時也可以順便把所有過了失效的key全部刪除
如果使用者下次訪問頁面但是session已經失效,那麼檢測是否有remember_key這個cookie,如果有的話,拿這個值以及訪問的ip去資料庫裡找記錄,如果找到了,那麼這條記錄的user_id對應的user就自動登入了。
當然你可以做一些修改,比如ip不見得是必須的,因為國內的使用者ip會老變嘛。