您的位置:首页 >> Workerman >> 和屌丝一起学Workerman—SESSION

和屌丝一起学Workerman—SESSION

[ 孤狼 | 2020-05-10 15:54:09 | Workerman | 3483°C | 0条评论 ]

超全局数组$_SESSION

$_SESSION是什么

GatewayWorker中的超全局数组$_SESSION和PHP自身的$_SESSION功能基本相同。每个client_id对应一个$_SESSION数组,$_SESSION数组中可以保存对应客户端的会话数据,对应的client_id的后续请求可以直接使用这个数组中的数据,而不用去反复读取存储。


$_SESSION使用场景

(WorkerMan>=2.1.2,Gateway/Worker模型)

例如客户端链接WorkerMan后,需要发送验证数据让服务端验证是否合法,一般要传递一次用户名和密码数据,然后在Gateway::onMessage($client_id, $message)中通过查询数据库验证$message中的用户名密码是否正确,如果正确就可以将用户的uid写入到$_SESSION中如$_SESSION['uid']=$uid;,那么当这个client_id再次发来数据时,要判断这个客户端是否是被验证过的,就可以用$_SESSION['uid']是否被设置来判断。


$_SESSION使用注意事项

使用$_SESSION时无需调用session_start等函数,可直接使用

$_SESSION中无法保存资源类型的数据

当客户端连接断开后,对应的客户端$_SESSION将会清除

GatewayWorker中的$_SESSION与WebServer(PHP-FPM)中的$_SESSION无法互通

定时器中不要直接使用$_SESSION变量,因为定时器运行那一刻无法确定$_SESSION变量里存储的值属于哪个client_id。如果定时器里面需要获得session,可以使用Gateway::getSession($client_id)获取

$_SESSION实现原理

在WorkerMan的Gateway/Worker模型中,每个客户端的$_SESSION数据是存储在Gateway进程内存中的,每次Gateway进程转发消息给BusibuessWorker进程时,都会顺便携带上对应客户端的$_SESSION数据给BusibuessWorker进程,这时BusibuessWorker进程就能使用$_SESSION了。而当$_SESSION数据有更改时,BusibuessWorker会将新的$_SESSION数据传递给Gateway进程进行保存。


转载请注明出处:http://gl.paea.cn/n.php?n=134
 
如您看得高兴,欢迎随意投喂,让我们坚持创作!
赞赏一个鸡腿
还没有人留下遗迹
综合 · 搜索