【发布时间】:2019-11-18 03:50:29
【问题描述】:
我正在尝试摆脱 laravel_session。
我已经尝试为它创建一个中间件
更改要使用的驱动程序:array file, database
这些都不起作用。每次刷新,我总是看到这个:
我怎样才能做到这一点?有可能吗?
【问题讨论】:
-
这是浏览器发送的cookie,测试新设置时清除它(清除浏览器缓存/历史记录)
我正在尝试摆脱 laravel_session。
我已经尝试为它创建一个中间件
更改要使用的驱动程序:array file, database
这些都不起作用。每次刷新,我总是看到这个:
我怎样才能做到这一点?有可能吗?
【问题讨论】:
如果您根本不想启动会话,请在 Laravel 5.1 中转到 app/Http/Kernel.php 并注释掉与会话相关的部分:
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\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,
];
请注意,仅删除 StartSession 中间件是不够的,您还必须禁用 ShareErrorsFromSession 和 VerifyCsrfToken,因为它们依赖于存在的会话。如果您想要更多逻辑,例如为某些路由排除它,您可以覆盖 StartSession middelware。我不知道有任何其他副作用,因为我还没有测试过。
如果您不需要会话或所有与网站相关的功能,例如,您只是构建一个 API,您可能需要查看为此目的而简化的 Laravel Lumen。
顺便说一句:会话驱动程序只定义了在哪里/如何存储会话服务器端。从客户端来看,它仍然只是一个加密的 cookie。
【讨论】:
Session store not set on request. - 你有什么建议吗?
array,以确保至少有一些功能(如果需要它)并且在请求后它会被清除。该错误究竟发生在哪里?根据会话确保视图中没有任何内容(例如检查 $errors 或呈现 CSRF 令牌)。
如果我有不希望 Laravel 使用 laravel_session 的特定路线。 您可以将其应用于您想要的任何路线。
例如。例如,如果您只想申请这 2 条路线:
url1 或 url2
Route::get('/url1', 'SampleController@fnName');
Route::get('/url2', 'SampleController@fnName2');
创建/app/Http/Middleware/StartSessionMiddleware.php
<?php
namespace App\Http\Middleware;
use Closure;
use Config;
use Illuminate\Session\Middleware\StartSession as BaseStartSession;
class StartSessionMiddleware extends BaseStartSession
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next) {
if($request->is('url1') || $request->is('url2')) {
Config::set('session.driver', 'array');
}
return parent::handle($request, $next);
}
}
通过在 /app/Http/Kernel.php 中添加一行来注册它
\App\Http\Middleware\StartSessionMiddleware::class,
现在,这两条路线的 laravel_session 应该不再存在了。
我希望这可以帮助某人。
【讨论】:
对于任何搜索的人,在 Laravel 5.5+ 中,您可以更改环境变量 SESSION_COOKIE=。如果你有一个更旧的应用程序,你可能需要直接在config/session.php 中设置它。
【讨论】:
使用
if($request->path('url1') || $request->path('url2')) {
查找 url 路径。对于我使用的欧盟 Cookie 跟踪:
<?php
namespace App\Http\Middleware;
use Closure;
use Config;
use Illuminate\Session\Middleware\StartSession as BaseStartSession;
class StartSessionMiddleware extends BaseStartSession
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next) {
if(!isset($_COOKIE['my-cookie'])) {
Config::set('session.driver', 'array');
}
return parent::handle($request, $next);
}
}
当用户接受时,使用 my-cookie 作为您设置的 cookie 的名称。
【讨论】: