请教一下,$_SESSION变量是一个用户一份还是整个服务器一份?
如果是一个服务器保存一份 $_SESSION 变量的话,按本章课程代码所示,当A用户访问时,$_SESSION['uid']和$_SESSION['name']都被记录成A用户的了,在A用户退出系统前,B用户也来访问了,这时这俩参数岂不是又被改写成 B 用户的数据了,如果A用户接着退出了,又要去清理$_SESSION变量,又把B用户的登录信息给清掉了吗?
感觉PHP的并发处理超级混乱,有没有教程专门讲这一块的内容呢?
如果是一个服务器保存一份 $_SESSION 变量的话,按本章课程代码所示,当A用户访问时,$_SESSION['uid']和$_SESSION['name']都被记录成A用户的了,在A用户退出系统前,B用户也来访问了,这时这俩参数岂不是又被改写成 B 用户的数据了,如果A用户接着退出了,又要去清理$_SESSION变量,又把B用户的登录信息给清掉了吗?
感觉PHP的并发处理超级混乱,有没有教程专门讲这一块的内容呢?
2017-03-10
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)。
举报