與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便可。