【问题标题】:How to use session in laravel 5.2 controller如何在 laravel 5.2 控制器中使用会话
【发布时间】:2016-08-25 10:41:08
【问题描述】:

我登录然后将用户名保留在会话中,然后我刷新此页面,但会话没有保留值。

这是我的代码:

class WelcomeCtrl extends Controller
{
     public function gotoWelcome()
     {   
         return view('welcome')->with('user',Session::get('user'));//nothing in session
     }

        public function dologin(){
                $username = $_POST['username'];
                $password = $_POST['password'];
                $result = "";
                if($username && $password){
                    $result = User::getUser($username, $password);
                    if($result){
                        Session::set('user',$result);
                        return response()->json([true, Session::get('user')]);//I get value expected, this is ok.
                    }
                }
                return response()->json([false, Session::get('user')]);     
            }
    }

【问题讨论】:

    标签: session laravel-5.2


    【解决方案1】:

    您是否已将中间件组“web”添加到您的路由中。在 5.1 中,这是所有路由的默认设置,用于会话管理和 csrf 验证等。

    【讨论】:

    • 哦,我好像没有添加中间件。
    • 请记住,最新版本的 Laravel 5.2 现在默认在路由服务提供程序中包含 web 中间件,因此如果您正在运行新版本之一,则无需这样做,例如5.2.30.
    • 我添加了这样的中间件:Route::group(['middleware' => ['web']], function () { Route::post('dologin','WelcomeCtrl@dologin '); Route::get('gotoWelcome','WelcomeCtrl@gotoWelcome'); } 但是当我使用 jquery 的 $.post 登录时,它说:“VerifyCsrfToken.php 第 67 行中的 TokenMismatchException:在 VerifyCsrfToken.php 第 67 行中VerifyCsrfToken->handle(object(Request), object(Closure)) at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) 在 Pipeline.php 第 124 行Pipeline->Illuminate\Pipeline\{closure}...我错过了什么吗?
    • 我把所有控制器放在 app\Http\controllers\ [我所有的文件控制器都在这里]。中间件可以吗=> web
    【解决方案2】:

    如果想使用 Session:: 确保你添加 session Facade by:

    use Session;
    

    您可以使用会话助手来代替它。所以你可以使用以下代码:

    session()->user()->email;
    session()->get('user');
    session()->flash('message', 'Hi there.');
    

    更多信息请见helpers

    【讨论】:

      【解决方案3】:
      Session::put('key','value');//to put the session value
      Session::get('key');//to get the session value
      
      Session::has('key');//to check the session variable exist or not
      

      【讨论】:

        【解决方案4】:

        记住一件事。在 Laravel 5.2 中使用 ajax 发布表单时,会出现 CsrfTokenMismatch 错误。为避免这种情况,请在 $except 数组中的 App/Http/Middleware/VerifyCsrfToken.php 中添加使用 ajax 接受表单值的路由名称。然后该路由将接受带有 ajax 请求的表单值。

        【讨论】:

        • 你也可以通过ajax请求@chipcoiga发送csrf令牌
        猜你喜欢
        • 2018-09-11
        • 1970-01-01
        • 2016-08-24
        • 1970-01-01
        • 2018-12-13
        • 2016-06-16
        • 2016-10-08
        • 2018-09-12
        • 2016-10-29
        相关资源
        最近更新 更多