使用數據庫mysql+cookie 模擬session?

與php自己的session相比,哪一個效率高呢? php

php的session是以文件方式保存的,曾經在一個訪問頻繁的頁面上使用了session實現驗證碼,結果1個星期下來,變得很是卡,最後發現,是存放session的目錄下堆了很是多的session文件,致使讀取或寫入session很是慢,不知道爲何php並無很好的刪除一些過時的session。 mysql

後來發現dz的session並無使用php自己的session,而是經過數據庫+ cookie模擬的session。 sql

是如何實現的呢?簡單的說一下。 數據庫

在mysql數據庫中建立一個內存類型的表,顧名思義,這個表中的數據是存放在內存中的,讀寫速度應該很是快。 安全

表中3個字段:  cookie

sid : 模擬session的id,惟一 session

uid : 本session對應的用戶id ui

time : 最後活動的時間 內存

用戶須要在本地cookie中存放一個$_COOKIE['sid'],這樣能夠根據sid值查詢 session表中對應的sid記錄,根據time判斷該session是否過時。 io

基本的實現原理就是這樣了,至於如何提升安全性,也能夠參考dz的session實現方法相關的文章。

因爲memory表的容量是有限的,能夠再mysql配置文件中調整大小,也能夠合理的設置session過時時間,而後每插入一個新的session,先判斷表是否滿了,滿了的話,刪除一些過時的session便可。

相關文章
相關標籤/搜索