【发布时间】:2017-05-18 14:55:48
【问题描述】:
我想在服务器中设置一个会话并让它随时可用。我正在使用 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.php下,在web middleware下,处理ajax请求的控制器在api.php下api middleware。
所以我想修改一下这个问题,有没有办法从web middleware 访问会话到api middleware?
对不起,我的错。
【问题讨论】:
-
要明确的是纯粹是让
csrf_token到 vue? -
不是,是获取设置的session的值。
-
我也没有使用 vue 我正在使用 react 但这似乎并不重要,因为这里的问题是 laravel。
-
我只是假设 vue 开箱即用。我的错!
-
没关系,我在第一期就知道哪里出了问题,我没有仔细考虑,你能回答后续问题吗?
标签: ajax session laravel-5.3