我的问题如下:
我有一个运行一系列AJAX调用的页面,例如
$.ajax({ url: "/user/post1" });
$.ajax({ url: "/user/post2" });
$.ajax({ url: "/user/post3" });
...
$.ajax({ url: "/user/postN" });
(我事先确定了ids)
我也有:
$.ajax({ url: "/user/modifysessiondata" });
现在的问题是我需要在每个请求中启动会话(以获取当前用户),此外“/ user / modifysessiondata”还需要修改会话数据。
但是我注意到,如果我只是立即执行所有AJAX请求,那么/user/postX
请求可能会在/user/modifysessiondata
请求之前开始并在此之后结束,那么它会将会话数据保存为是在调用请求时,因此将覆盖第二次调用设置的会话数据。
我的问题是:
是否可以将在特定请求中启动的会话标记为“只读”?我是否需要为此创建一个新的自定义StartSession
中间件?
我只是在做一些完全荒谬的事情吗?
注意:澄清我在谈论Laravel会话。我正在使用redis支持的会话存储。
答案 0 :(得分:0)
如果它对任何人有帮助,这就是我最终做的事情:
在我的RouteServiceProvider.php
boot()
方法中:
Route::group([
'middleware' => 'readonly',
'namespace' => $this->namespace,
], function ($router) {
Route::get("user/{post}","UserController@getPost");
});
在我的Kernel.php
:
'readonly' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\App\Http\Middleware\StartReadOnlySession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
'bindings',
]
这基本上是从web
路线组中复制的,StartSession
替换为StartReadOnlySession
这是我的StartReadOnlySession
代码(问题的妙语):
use Illuminate\Session\Middleware\StartSession;
class StartReadOnlySession extends StartSession {
public function terminate($request, $response) { /* Does nothing */ }
}
这会启动会话,但在请求终止时不会保存。其他一切行为都相同。