本帖最后由 sky94132003 于 2014-07-25 21:02:14 編輯 最近做的一個系統(tǒng)
登錄是用$_COOKIE做的
會自動生成一個識別符($identifier)和驗證符($token),保存到
<br />$_COOKIE["auth"] = $identifier . ":" . $token ;<br />有做加密,在此先不提加密的事<br />
登錄后復(fù)制
同時把
識別符($identifier)和驗證符($token)?分別保存到SQL的2個欄位
做了個function,并且在confing文件中引入運(yùn)作
這樣就每一頁都會驗證
function?大約是意思是
list($identifier,?$token)?=?explode(':',?$_COOKIE['auth']);
取回$_COOKIE之前設(shè)定的
識別符($identifier)和驗證符($token)?
然后對比數(shù)據(jù)庫??這兩個值是否一模一樣
如果是正確,那就照常運(yùn)作,如果不相等,就清空
setcookie('auth',?'DELETED!',?time()-1);
以上這樣做,就可以做到自動登錄的效果了
效果和驗證是可以正常使用,但問題是,大家的網(wǎng)站....難度驗證功能都是每一頁都要查詢一次數(shù)據(jù)庫的嗎?
有沒有什么別的方法?
基本上想到...是否做個別的timeout字段,定時清空,如果空了,才進(jìn)行驗證,又重新付值一次?
腦筋有點塞了,求個思路。
------解決方案--------------------1、驗證只發(fā)生在需要以用戶數(shù)據(jù)修改系統(tǒng)數(shù)據(jù)數(shù)據(jù)的頁面
2、增強(qiáng)的驗證必須來自不同的數(shù)據(jù)源。將?識別符和驗證符?用同一種方式傳遞,是沒有意義的,自欺欺人的。
3、如有“踢人”的需求,那么就需要時刻檢查了。可使用自定義的?session?處理程序來完成
------解決方案--------------------直接獲取cookie,用服務(wù)器的key解出來就可以了,不用驗證,因為若是被修改,你用服務(wù)器的key是解不出來的
比如你就存放個uid和過期時間,要是能解出來,你就直接查詢那個uid的信息,并存放到全局變量里面,解出來沒有uid,說明就是被篡改了,要重新登錄
------解決方案--------------------
1.負(fù)載問題我沒有實際經(jīng)驗,但session的文件是hash,加了正確索引的用戶表是樹,我想前者會快一些,而且每個頁面都要查詢,似乎有些太占數(shù)據(jù)庫連接了
2.cookie和session配合著來,session負(fù)責(zé)當(dāng)前登陸,存?zhèn)€cookie負(fù)責(zé)下次自動登陸唄