laravel的会话问题:当api.php中的路由器无法从会话中检索数据

时间:2017-10-26 08:49:51

标签: php laravel session

我正在尝试按会话传递数据。

我的控制器有两个功能:

public function setEdit(Request $request){
    session(['estateId' => $request->estateId]);
    return response()->json(['message' => 'success' ]);
}

public function getEdit(){
    return response()->json(['base'=> session('estateId')]);
}

当我在 web.php 调用getEdit()方法时,它将正确检索estateId。

web.php:

Route::post('/setEdit', 'API\EstateController@setEdit');
Route::get('/getEdit', 'API\EstateController@getEdit');

但是,如果我在 api.php 调用getEdit()方法,它就不会获得estateId。

api.php

Route::post('/setEdit', 'API\EstateController@setEdit');
Route::get('/getEdit', 'API\EstateController@getEdit');

我很确定我在前端做得很好。 当我将路由器从web.php移动到api.php时,我没有忘记更改URL。

那么为什么我在路由器处于api.php时无法使用会话

好的,现在我知道使用session在每个页面之间传递数据,似乎是个坏主意。

这是我的前端,我试图传递数据和重定向。

let apiUrl = '../api/estate/setEdit';
let config = {
    headers: {'Authorization': 'Bearer ' + localStorage.getItem('token')}
};
let postItem = {'estateId':estateId};
axios.post(apiUrl, postItem ,config).then(response => {
    location.replace('edit-estate');
}).catch(function (error) {
    console.log(error);
});

我发现我可以将estate_id作为URL中的参数(例如location.replace(' edit-estate?estate_id = 15');


有我的新问题: 的
1。如何将标记放入标题?
2.如果我想通过json怎么做?

1 个答案:

答案 0 :(得分:0)

默认情况下,您不应该在api中使用会话,因为在api的情况下,larval不会启动会话。看看kernel.php:

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \App\Http\Middleware\InitiateApp::class,
    ],

    'api' => [
        'throttle:60,1',
        'bindings',
    ],
];

最好为api服务而不是会话使用post参数和基于令牌的身份验证,但对于API和API,您可以使用Web中间件而不是api。 Web请求(不推荐)。