Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel,会话只适用于一个在线用户_Php_Laravel_Session_Authentication - Fatal编程技术网

Php Laravel,会话只适用于一个在线用户

Php Laravel,会话只适用于一个在线用户,php,laravel,session,authentication,Php,Laravel,Session,Authentication,我是新来的 我编写了一个脚本,许多用户可以使用它 但我的问题是: 当像“Helen”这样的用户登录时,她可以看到自己的个人资料 但如果下一个像“Maria”这样的用户登录,Marias面板将为他们显示 我认为这意味着在同一时间只能有一个会话处于活动状态,会话的价值将针对最新的用户 旧用户会话不会过期,只是会话中的值将被更改,因此她标识为另一个用户并可以查看该用户配置文件,而且当用户注销时,由于会话关闭,所有用户都将注销。 以下是我的简单代码: public function Login(){

我是新来的

我编写了一个脚本,许多用户可以使用它

但我的问题是:

当像“Helen”这样的用户登录时,她可以看到自己的个人资料 但如果下一个像“Maria”这样的用户登录,Marias面板将为他们显示

我认为这意味着在同一时间只能有一个会话处于活动状态,会话的价值将针对最新的用户 旧用户会话不会过期,只是会话中的值将被更改,因此她标识为另一个用户并可以查看该用户配置文件,而且当用户注销时,由于会话关闭,所有用户都将注销。 以下是我的简单代码:

public function Login(){
        $this->Token();
        $pack=Input::all();
        try {
           $result=DB::table('user')->where('Email','=',$pack['email'])->get();
            if (Hash::check($pack['password'], $result[0]->Password)){
                session(['there' => $result['0']->Email]);
                return redirect('dashboard');
            }
            return redirect('dashboard')->with('does','wrong password');
        }catch(Exception $e){
            return redirect('dashboard')->with('does',.$e);
        }
}

public function UserType() {
        if(!session('there'))
            return "Not Logged";
        else {
            $result = DB::table('user')->where('Email', '=', session('there'))->get();

        if($result!=null)
            return "User";
}

public function ShowDashboard(){
        if($this->UserType()=="Not Logged")
        else
            return view('pages/dashboard');
}

我不知道您为什么要
session()
管理用户登录。。。此外,它们在很大程度上取决于用户从同一台计算机、同一个浏览器登录的情况。。。饼干。。。等等等等。。。也许这就是为什么你可能同时得到两个不同的会话值

无论如何。。请尝试使用Laravel预定义的
Auth
功能来处理您的登录/注销过程

public function Login()
{
  // What does this do? Check for a CSRF token? If yes, then
  // please understand then Laravel automatically checks
  // for the CSRF token on POST/PUT requests and therefore
  // there is no special need to use the below function...
  $this->Token();

  $pack = request()->only(['email', 'password']);

  // I don't really feel try catch is required here... but completely your choice...
  try {
    if(auth()->attempt($pack)) {
      return redirect('dashboard')
    }
    return redirect->back()->with('does', 'wrong password');
  } catch(Exception $e) {
    return redirect->back()->with('does', $e);
  }
}


public function ShowDashboard()
{
  // You can remove this if/else by adding the 'auth' middleware
  // to this route
  if(!auth()->check())
    return view('pages.dashboard');
  else
    return redirect(route('login'));
}
我发现你上面的代码有很多问题

  • 请使用camelCase命名函数。。。(我没有更改上面代码中的命名,因为我真的不知道您在工作场所或idk中遵循什么规则…)
  • 对于简单的真/假情况,请不要返回字符串
  • 请尽可能尝试使用
    型号
    。对于非常复杂和广泛的查询,需要使用原始
    DB
    命令

  • 似乎有什么不对劲;你为什么要完全避开Laravel的内置身份验证?我发现您的方法中存在一些逻辑漏洞,可能返回未知值。返回值为true。。。我尝试了dd(会话),返回的值为true