会话
配置
由于 HTTP 驱动的应用程序是无状态的,会话提供了一种在请求之间存储用户信息的方法。Laravel 提供了多种会话后端,通过一个干净、统一的 API 可供使用。支持流行的后端如 Memcached、Redis 和数据库的支持是开箱即用的。
会话配置存储在 config/session.php
中。请务必查看此文件中提供的详细选项。默认情况下,Laravel 配置为使用 file
会话驱动,这对于大多数应用程序来说都能很好地工作。
在使用 Laravel 的 Redis 会话之前,您需要通过 Composer 安装 predis/predis
包 (~1.0)。
如果您需要加密所有存储的会话数据,请将 encrypt
配置选项设置为 true
。
当使用 cookie
会话驱动时,您绝不应该从 HTTP 内核中移除 EncryptCookie
中间件。如果移除此中间件,您的应用程序将容易受到远程代码注入的攻击。
保留键
Laravel 框架内部使用 flash
会话键,因此您不应以该名称向会话添加项目。
会话使用
可以通过 HTTP 请求的 session
方法、Session
facade 或 session
辅助函数访问会话。当不带参数调用 session
辅助函数时,它将返回整个会话对象。例如:
session()->regenerate();
在会话中存储项目
Session::put('key', 'value');
session(['key' => 'value']);
将值推送到数组会话值中
Session::push('user.teams', 'developers');
从会话中检索项目
$value = Session::get('key');
$value = session('key');
检索项目或返回默认值
$value = Session::get('key', 'default');
$value = Session::get('key', function() { return 'default'; });
检索项目并忘记它
$value = Session::pull('key', 'default');
从会话中检索所有数据
$data = Session::all();
确定会话中是否存在项目
if (Session::has('users'))
{
//
}
从会话中移除项目
Session::forget('key');
移除会话中的所有项目
Session::flush();
重新生成会话 ID
Session::regenerate();
闪存数据
有时您可能希望仅在下一个请求中存储项目在会话中。您可以使用 Session::flash
方法来实现:
Session::flash('key', 'value');
重新闪存当前闪存数据以用于另一个请求
Session::reflash();
仅重新闪存闪存数据的子集
Session::keep(['username', 'email']);
数据库会话
使用 database
会话驱动时,您需要设置一个表来包含会话项目。以下是表的 Schema
声明示例:
Schema::create('sessions', function($table)
{
$table->string('id')->unique();
$table->text('payload');
$table->integer('last_activity');
});
当然,您可以使用 session:table
Artisan 命令为您生成此迁移!
php artisan session:table
composer dump-autoload
php artisan migrate
会话驱动
会话“驱动”定义了每个请求的会话数据将存储在哪里。Laravel 开箱即用地提供了几个很好的驱动:
file
- 会话将存储在storage/framework/sessions
中。cookie
- 会话将存储在安全、加密的 cookie 中。database
- 会话将存储在应用程序使用的数据库中。memcached
/redis
- 会话将存储在这些快速的缓存存储中。array
- 会话将存储在一个简单的 PHP 数组中,并且不会在请求之间持久化。
数组驱动通常用于运行单元测试,因此不会持久化任何会话数据。