为了账号安全,请及时绑定邮箱和手机立即绑定

请教一下,$_SESSION变量是一个用户一份还是整个服务器一份?

如果是一个服务器保存一份 $_SESSION 变量的话,按本章课程代码所示,当A用户访问时,$_SESSION['uid']和$_SESSION['name']都被记录成A用户的了,在A用户退出系统前,B用户也来访问了,这时这俩参数岂不是又被改写成 B 用户的数据了,如果A用户接着退出了,又要去清理$_SESSION变量,又把B用户的登录信息给清掉了吗?

感觉PHP的并发处理超级混乱,有没有教程专门讲这一块的内容呢?

正在回答

4 回答

     php在web服务器上运行时使用php-FPM作为和web服务器交流的中间件,在php-FPM中会为每一个请求分配一个work进程,而每个worker进程里都存在一个php解析器,这样就能保证不同访问之间的数据能够进行隔离而不会出现数据混乱的情况。这个是多进程并发php处理的情况。

      而且,session的运行机制是-告诉浏览器我会对请求访问的用户进行标识跟踪,这样浏览器在发送请求的时候就会自动的将所有的cookie值在每次的请求中作为参数发送过去(其实无论服务器上是否开启了session功能都会将该网站的cookie值(未过期的)作为请求的参数发送给服务器)。

         自然在这里面的cookie中, 如果在这次访问中已经开始了session自然也会包括 seesion_id 这个cookie,如果之前服务器没有为这个访问的用户分配相应的session_id 那么在该次请求之后就会分配相应的 seesion_id 告知浏览器(即客户端, 且服务器端设置开启了 session_start),有了session_id 服务器就能够区别不同的访问的用户,从而使用独自的session文件(默认使用文件存储session)。

0 回复 有任何疑惑可以回复我~

session是根据客户端来判断的,不同的客户端会有不同的sessionid,是不同的session对象

0 回复 有任何疑惑可以回复我~

session是服务器为不同的客户端(用户)创建的保存数据的session对象,楼主所说的A用户访问B用户的数据不会出现,原因是一个Session定义的全局变量的作用范围,是指这个Session所对应的用户所访问的所有PHP,并不包含其他用户访问的内容。

另外,session_id是一次请求服务器为其创建一个,但是,请求过后下一次再请求时,服务器会首先检索是否已经存在请求的session_id,有则启用,没有则创建,所以也不能说是一次请求生成一个,不准确。

还有一点就是,一个用户使用不同的浏览器访问服务器会创建不同的session_id(记不清了,有待验证...)。

3 回复 有任何疑惑可以回复我~

准确的来说是一个session_id一个,也可说是每个用户一个

0 回复 有任何疑惑可以回复我~
#1

金泽城 提问者

是么,session_id是服务器自动生成的吧,可是服务器是怎么区分不同的用户的呢?一次请求一个?还是一个IP一个?逻辑还是理不通啊。
2017-03-10 回复 有任何疑惑可以回复我~
#2

那些年29 回复 金泽城 提问者

大哥那是数据库读取 赋值的,不是服务器自动生成,要是自动生成那就乱套了,每次登入,每次换id 你觉得可能吗
2017-05-24 回复 有任何疑惑可以回复我~
#3

慕圣3571134 回复 金泽城 提问者

也可以指定分配id,session_id("指定的id值")。取回的时候可以使用 0 + session_id()转换为int数据类型
2018-12-22 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

请教一下,$_SESSION变量是一个用户一份还是整个服务器一份?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信