例如在
beforeAction
请求前置操作赋值$userInfo
,对于当前请求,后面的所有操作对于$userInfo
的操作都是安全的吗?两个请求之间会互相影响吗?
<?php
namespace app\controller;
use support\Request;
class Index
{
/**
* 保存用户信息
*/
protected $userInfo;
/**
* 该方法会在请求前调用
*/
public function beforeAction(Request $request)
{
// 每个请求中重新赋值$userInfo变量
$this->userInfo = Db::name('user')->where('id', $request->get('id'))->find();
}
public function index(Request $request)
{
var_dump($this->userInfo);
}
}
安不安全应该你自己处理,至少单个进程来说它是串行的,多进程如在同时在另一个进程产生同一个身份请求那它就不安全。
大佬说的“同时”是指多个同样的请求都未结束的情况下吗?这个类属性会被最后一个请求所改写,并影响前面的请求吗?(不理解!)。
之前请求都处理完了,不影响前面的请求
webman单个进程内请求是排队处理的,每个请求都会先执行beforeaction,会先重置$userinfo,所以是安全的
我也是这么理解的,进程是隔离的,即使是多进程下应该也是安全的才对!
写个afterAction清除用户状态
不清除也没事,下个请求会重新赋值😁
费内存
不会影响的,多进程的话,进程间变量是互不影响的,并且单个进程请求是排队处理的,
假设你只开了一个进程,在处理你访问的时候,又进来了N个请求,那这时候N个请求实际都是在排队等着的,必须等进程把你的访问处理完了,才会处理下一个请求.
大佬我信你!就凭你在
月贡献榜
排名靠前。呵呵大佬也就是说不管单线程还是多线程,这个
$userInfo
变量对于当前请求不管怎么操作都是安全的对吗,如果下一个请求进来时$userInfo
是会重写的,也是不会影响下一个请求的,可以这样理解吗对,就是这样理解,但是名称要搞清楚,这个是进程,不是线程,线程的话不一样的.
你可以在本地开启1个进程来测试
这样写没问题,如果是数组,每次使用前得设置成空数组