加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2022-12-05 15:02:12 所属栏目:PHP教程 来源:网络
导读: 我们很多程序员都是使用SESSION来保存用户登录的一些信息,都知道session是保存在服务端的,默认情况下,php是将session数据保存在文件里面的,并且文件以sessionid命名的,那么为什么PHP的

我们很多程序员都是使用SESSION来保存用户登录的一些信息,都知道session是保存在服务端的,默认情况下,php是将session数据保存在文件里面的,并且文件以sessionid命名的,那么为什么PHP的底层要对SESSION的操作进行上锁的操作呢?

PHP数据库_php库存管理系统_php 安装gd库

SESSION的操作有哪些?

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

引入锁的原因

php 安装gd库_php库存管理系统_PHP数据库

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

引入锁之后会发生什么

php库存管理系统_PHP数据库_php 安装gd库

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

PHP数据库_php 安装gd库_php库存管理系统

怎么快速释放相应的锁

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

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

php 安装gd库_PHP数据库_php库存管理系统

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

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!