我正在使用 laravel 和默认 session 驱动程序设置为 REDIS 为我的 Android 应用程序构建 API。
我在这里找到了一篇好文章http://dor.ky/laravel-prevent-sessions-for-routes-via-a-filter/哪一种服务于此目的。
然而,每当我点击 url 时,它也会点击 redis 并生成空的 key 。现在我想避免在 redis 中创建空 session key 。理想情况下,它不应该命中 redis 我该怎么做?
我们能否以某种方式自定义 session ,以便仅针对特定路由生成 session (或针对特定路由禁用 session )?
我可以用具体的用例来解释更多,请告诉我。
最佳答案
在 Laravel 5 中使用中间件真的很容易,我需要任何带有 API key 的请求都没有 session ,我只是这样做了:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Session\Middleware\StartSession as BaseStartSession;
class StartSession extends BaseStartSession
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(\Request::has('api_key'))
{
\Config::set('session.driver', 'array');
}
return parent::handle($request, $next);
}
}
您还需要按如下方式扩展 SessionServiceProvider:
<?php namespace App\Providers;
use Illuminate\Session\SessionServiceProvider as BaseSessionServiceProvider;
class SessionServiceProvider extends BaseSessionServiceProvider
{
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
$this->registerSessionManager();
$this->registerSessionDriver();
$this->app->singleton('App\Http\Middleware\StartSession');
}
}
并将您的 config/app.php
放在 providers
下:
'App\Providers\SessionServiceProvider',
您还必须在内核文件中更改它:App/Http/Kernel.php
,在 $middlewareGroups
部分更改默认条目,\Illuminate\Session\Middleware\StartSession::class,
到你的新类 \App\Http\Middleware\StartSession::class,
。
关于php - 防止 Laravel 中的路由 session (自定义按需 session 处理),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26473106/