关于用户自己的私有变量问题

一条材

我现在使用了beforeAction和afterAction,然后我在自己写的某个方法里定义了一个变量,想要在afterAction里使用,如果我直接使用$this->val = xxx这样,那么所有这个线程的用户都共用这个变量了吧?我要如何定义某个用户自己的变量并在afterAction里使用呢?难道只能使用session?多几个变量感觉就是session滥用了

802 1 0
1个回答

2548a

每个进程是独立的,每个进程当前只会处理一个人的,所以你的这个:那么所有这个线程的用户都共用这个变量了吧 是不成立的.webman现在是多进程阻塞模式,不是异步非阻塞模式
通俗点说,一个进程相当于一个门,所有人都在门口排队,大家必须等第一个进去,出来,紧跟着门口的第二个人才能进去.所以,只要你在beforeAction重置了值,不存在说第一个定义了变量,会被第二个人用到因为他们不是同时执行的,而是顺序执行的.

  • 一条材 2022-06-01

    但是你忘记了一点,controller是驻留在内存的,$this->val的值也会被留下来了,我也测试了,a用户设置了一个变量,然后b用户未设置这个变量,但是b用户进去打印出来的是a用户设置的变量值

  • 一条材 2022-06-01

    哦,你是说在beforeAction里重置这个值,这样应该是可以的

  • 一条材 2022-06-01

    非常感谢,我想通了

  • liziyu 2022-06-01

    咋感觉你没真想通呢!~ ^_^

  • 鲁达 2022-06-02

    可以保存到请求属性中,request()->val = xxx; 这样每次请求完都会回收request对象,用户之间互不影响

  • 一条材 2022-06-02

    放到request()里的方法也不错

年代过于久远,无法发表回答
🔝