使用数据库mysql+cookie 模拟session?

原创
2012/12/06 12:22
阅读数 292

与php本身的session相比,哪个效率高呢?

php的session是以文件方式保存的,曾经在一个访问频繁的页面上使用了session实现验证码,结果1个星期下来,变得非常卡,最后发现,是存放session的目录下堆了非常多的session文件,导致读取或写入session非常慢,不知道为什么php并没有很好的删除一些过期的session。

后来发现dz的session并没有使用php本身的session,而是通过数据库+ cookie模拟的session。

是如何实现的呢?简单的说一下。

在mysql数据库中创建一个内存类型的表,顾名思义,这个表中的数据是存放在内存中的,读写速度应该非常快。

表中3个字段: 

sid : 模拟session的id,唯一

uid : 本session对应的用户id

time : 最后活动的时间

用户需要在本地cookie中存放一个$_COOKIE['sid'],这样可以根据sid值查询 session表中对应的sid记录,根据time判断该session是否过期。

基本的实现原理就是这样了,至于如何提高安全性,也可以参考dz的session实现方法相关的文章。

由于memory表的容量是有限的,可以再mysql配置文件中调整大小,也可以合理的设置session过期时间,然后每插入一个新的session,先判断表是否满了,满了的话,删除一些过期的session即可。


展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
2 收藏
0
分享
返回顶部
顶部