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

与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即可。


转载于:https://my.oschina.net/cxz001/blog/94234

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值