请教下webman每个请求的变量是安全的吗

咸鱼.php

例如在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);
    }
}
1076 6 0
6个回答

胡桃

安不安全应该你自己处理,至少单个进程来说它是串行的,多进程如在同时在另一个进程产生同一个身份请求那它就不安全。

  • liziyu 2022-08-12

    大佬说的“同时”是指多个同样的请求都未结束的情况下吗?这个类属性会被最后一个请求所改写,并影响前面的请求吗?(不理解!)。

  • xiuwang 2022-08-12

    之前请求都处理完了,不影响前面的请求

xiuwang

webman单个进程内请求是排队处理的,每个请求都会先执行beforeaction,会先重置$userinfo,所以是安全的

  • liziyu 2022-08-12

    我也是这么理解的,进程是隔离的,即使是多进程下应该也是安全的才对!

ichynul

写个afterAction清除用户状态

2548a

不会影响的,多进程的话,进程间变量是互不影响的,并且单个进程请求是排队处理的,
假设你只开了一个进程,在处理你访问的时候,又进来了N个请求,那这时候N个请求实际都是在排队等着的,必须等进程把你的访问处理完了,才会处理下一个请求.

  • liziyu 2022-08-12

    大佬我信你!就凭你在月贡献榜排名靠前。呵呵

  • 咸鱼.php 2022-08-12

    大佬也就是说不管单线程还是多线程,这个$userInfo变量对于当前请求不管怎么操作都是安全的对吗,如果下一个请求进来时$userInfo是会重写的,也是不会影响下一个请求的,可以这样理解吗

  • 2548a 2022-08-12

    对,就是这样理解,但是名称要搞清楚,这个是进程,不是线程,线程的话不一样的.

evilk

你可以在本地开启1个进程来测试

  • 暂无评论
gddd

这样写没问题,如果是数组,每次使用前得设置成空数组截图

  • 暂无评论
年代过于久远,无法发表回答
🔝