我想在服务器中设置一个会话,并随时可用。我正在使用Laravel 5.3,我在我的一个控制器上有以下代码:
Session::set('csrf_token', str_random(72));
return view('index', [
'session' => $session,
'csrf_token' => Session::get('csrf_token')
]);
然后我使用名为axios
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.php
下web middleware
,而处理ajax请求的控制器在{ {1}}位于api.php
。
所以我想修改一下这个问题,有没有办法从api middleware
到web middleware
访问会话?
抱歉,我的不好。
答案 0 :(得分:0)
很抱歉,我没有仔细观察,原因是因为会话是在web.php下设置的,这是在web中间件下,并且处理ajax请求的控制器在api.php中是在api中间件下。
所以我想修改一下这个问题,有没有办法从Web中间件访问会话到api中间件?
抱歉,我的不好。