PHP对SESSION的操作其实很像我们对数据库的操作

2022-10-11 21:08:06 134 0
魁首哥

SESSION的操作有哪些?

对于PHP程序员来说,应该对session都不陌生,我们知道,关于SESSION的操作和数据库一样,有读取、写入、修改、删除,也就是说,对于一个SESSION会话,估计会有很多地方在写、很多地方再读,而且还不能够确定是读在前还是写在前。

引入锁的原因

上面已经分析了,对于同一个会话,如果没有锁的引入,我们会发现有可能读取的数据是修改之前的数据,而不是修改之后的数据,这样使用修改之前的数据进行一些操作,势必会引入很多数据不一致的问题,尤其涉及用户财产安全的数据,这种情况其实和数据库一样,而数据库是使用事务来处理,而PHP是使用锁来处理,就是锁定相应的SESSION文件。

引入锁之后会发生什么

看看上面的代码,我们首先开启会话,然后读取数据库里面某个用户的用户名,然后将这个用户名赋予SESSION变量,然后休眠1000秒钟,我们知道,对于PHP默认情况下,如果一个PHP脚本结束了,SESSION对话就自动关闭了,现在由于休眠,所以SESSION对话没有关闭,导致我们打开选项卡访问另一个有SESSION操作的页面时,页面一直等待一直转圈圈。

怎么快速释放相应的锁

上面我们已经模拟了一种session锁的情况,这种情况其实就是描述了一种生产环境的情况,就是后面的代码需要执行的时间很长,那么面对这种情况,我们可以采用提前关闭结束SESSION会话的方式来解决锁等待的问题。

在PHP7之前,我们可以用session_write_close函数来关闭,这种关闭不管是读取还是写入会话、更新等等都有效,不过在PHP7中专门针对读取引入了read_and_close这个,我们可以在开启会话的时候指定这个选项,这样对于读取类的会话就不用我们手动关闭了。

不知道大家发现没有,关于SESSION的锁这些知识非常像我们的数据库,只不过默认情况下,是用文件锁来完成事务的相关功能。

收藏
分享
海报
0 条评论
134
上一篇:php使用Chart.js 下一篇:使用PHP访问MySQL并显示MySQL中的数据(适合新手)

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码