在laravel 5.3中访问从Web中间件到api中间件的会话

时间:2017-01-04 10:37:20

标签: ajax session laravel-5.3

我想在服务器中设置一个会话,并随时可用。我正在使用Laravel 5.3,我在我的一个控制器上有以下代码:

Session::set('csrf_token', str_random(72));
return view('index', [
    'session' => $session,
    'csrf_token' => Session::get('csrf_token')
]);

然后我使用名为axios

的包发出了Ajax请求
axios.post('to-that-route', 'some-data')
     .then(response => console.log(response))
     .catch(err => console.log(err));

我的问题是处理这个ajax请求的控制器,似乎它不知道我刚设置的会话,事实上这个:

return response()->json(var_dump(Session::get('csrf_token')));

会给我null,这意味着它不知道session csrf_token。我该如何处理?

编辑:

我试过这样做:

public function handler(Request $request) {
    // set the session
    $request->session()->put('csrf_token', str_rand(72));
}


// the controller that handles the ajax request
public function handler(Request $request) {
    return response()->json(var_dump($request->session->get('csrf_token')));
}

它给了我一个错误Session store not set on request.

编辑:

对此我很抱歉,我没有仔细观察,原因是会话设置在web.phpweb middleware,而处理ajax请求的控制器在{ {1}}位于api.php

之下

所以我想修改一下这个问题,有没有办法从api middlewareweb middleware访问会话?

抱歉,我的不好。

1 个答案:

答案 0 :(得分:0)

很抱歉,我没有仔细观察,原因是因为会话是在web.php下设置的,这是在web中间件下,并且处理ajax请求的控制器在api.php中是在api中间件下。

所以我想修改一下这个问题,有没有办法从Web中间件访问会话到api中间件?

抱歉,我的不好。