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

本文对比了PHP session机制与通过数据库+Cookie模拟session的方法,指出后者在高频访问场景下的优势,并详细阐述了DZ论坛采用的数据库+Cookie session实现原理,包括内存表的创建、关键字段的定义以及如何通过本地cookie实现session的快速查找与判断过期。同时讨论了如何合理设置session容量与过期时间以优化性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

与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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值