Cal*_*Oki 5 php session session-variables laravel vuejs2
我正在设置并尝试从 Laravel 应用程序中检索会话值。Vue Js 前端正在对 Laravel 端点进行 API 调用,该端点设置会话值。包含 Laravel 端点方法的控制器是:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
Use Session;
use App\User;
class UserController extends Controller
{
public function adduser(Request $request) {
$user = User::where( 'sub', $request->sub )->first();
if(!$user) {
$user = new User();
$user->nickname = $request->nickname;
$user->name = $request->name;
$user->sub = $request->sub;
$user->api_token = $request->api_token;
$user->save();
}
$user->api_token = $request->api_token;
$user->save();
return response()
->json([
'done' => $user->api_token
]);
}
//The endpoint for this method is http://localhost:8000/api/set
public function setSession(Request $request) {
$request->session()->put('info', 'testing vue client again');
Session::save();
return response()
->json([
'done' => session('info')
]);
}
//The endpoint for this method is: http://localhost:8000/api/get
public function getSession(Request $request) {
$value = $request->session()->get('info');
return response()
->json([
'done' => $value
]);
}
}
Run Code Online (Sandbox Code Playgroud)
会话数据已成功设置,但是当我尝试从该getSession()方法中检索此数据时,它返回 null。这是我用来尝试检索会话数据的 Vue Js/axios 代码片段
axios({
method: 'get',
url: 'http://localhost:8000/api/get',
}).then((res) => {
console.log(res.data)
})
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?谢谢
默认情况下,routes/api.php 文件中的路由没有StartSession中间件,因为 api 调用被视为无状态。您可以将此中间件添加EncryptCookies到文件中的 api 中间件组app/Http/Kernel.php,如下所示,具体顺序如下:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
'throttle:60,1',
'bindings',
],
];
Run Code Online (Sandbox Code Playgroud)
对我有用。另外,认为您可以将api组设置为与您的情况完全相同的web组。
并且不要忘记使用新配置再次设置会话变量。
| 归档时间: |
|
| 查看次数: |
3023 次 |
| 最近记录: |