Lumen中启用session

Posted spectrelb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lumen中启用session相关的知识,希望对你有一定的参考价值。

原文链接:http://www.jianshu.com/p/dc33f8ab0618

Lumen5.2 的Release Notes中官方明确的指出Lumen专注于构建无状态API,JSON API 服务,移除了session和view的支持,但其实view还是存在的,session确实真的被移除了

因为项目需要所以我决定找回session,虽然官方建议需要session功能时可以使用强大的Laravel框架,但是对我小项目确实有点大材小用了。因为喜欢Laravel的优雅,所以我在小项目中都会把Lumen做为项目的首选。

下面就来一步步找回“丢失”的session吧!

注册SessionServiceProvider

打开bootstrap/app.php,在相应位置添加注册SessionServiceProvider,代码如下


/*
|--------------------------------------------------------------------------
| Register Service Providers
|--------------------------------------------------------------------------
|
*/
// 注册 SessionServiceProvider
$app->register(Illuminate\Session\SessionServiceProvider::class);
// 载入session相关配置
$app->configure(‘session‘);

configure函数会从文件中加载配置,并绑定到container中,接下来只需要在项目根目录创建config文件夹,并新建session.php配置文件

<?php
/**
 * Created by PhpStorm.
 * User: Spectre
 * Date: 2017/6/19
 * Time: 11:40
 */
return [
    ‘driver‘ => env(‘SESSION_DRIVER‘, ‘file‘),//默认使用file驱动,你可以在.env中配置
    ‘lifetime‘ => 120,//缓存失效时间
    ‘expire_on_close‘ => false,
    ‘encrypt‘ => false,
    ‘files‘ => storage_path(‘framework/session‘),//file缓存保存路径
    ‘connection‘ => null,
    ‘table‘ => ‘sessions‘,
    ‘lottery‘ => [2, 100],
    ‘cookie‘ => ‘laravel_session‘,
    ‘path‘ => ‘/‘,
    ‘domain‘ => null,
    ‘secure‘ => false,
];

然后在storage/framework/下建立session文件夹用来存储session缓存,别忘了修改权限

注册StartSession中间件

打开bootstrap/app.php,在Register Middleware位置修改

// bootstrap/app.php
// ...
|--------------------------------------------------------------------------
| Register Middleware
|--------------------------------------------------------------------------
// ...
$app->middleware([
    Illuminate\Session\Middleware\StartSession::class
]);

添加Session别名

因为框架中使用了session别名,所以需要添加alias,不然会报错

// bootstrap/app.php
// ...
// 注册 SessionServiceProvider
$app->register(Illuminate\Session\SessionServiceProvider::class);

// 载入session相关配置
$app->configure(‘session‘);

// 设置session别名
$app->alias(‘session‘, ‘Illuminate\Session\SessionManager‘);

使用session

至此,你就可以在代码中使用session了,使用 app(‘session‘) 即可获取session实例,示例:

 $request->session()->set(‘user‘, $users);
 $request->session()->get(‘user‘);

 

以上是关于Lumen中启用session的主要内容,如果未能解决你的问题,请参考以下文章

Lumen 5.8 启用 cors

在 Lumen (Laravel) 中启用中间件

UE5中启用Lumen全局光照的方法

如何在 LUMEN 5.2 中激活会话

在 webview_flutter 中启用捏合和缩放,在哪里添加代码片段 [this.webView.getSettings().setBuiltInZoomControls(true);]

会话不在 Lumen PHP 框架中持续存在