Skip to content
虚位以待
赞助商
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待

会话

配置

由于 HTTP 驱动的应用程序是无状态的,会话提供了一种在请求之间存储用户信息的方法。Laravel 提供了多种会话后端,通过一个干净、统一的 API 可供使用。支持流行的后端如 MemcachedRedis 和数据库的支持是开箱即用的。

会话配置存储在 config/session.php 中。请务必查看此文件中提供的详细选项。默认情况下,Laravel 配置为使用 file 会话驱动,这对于大多数应用程序来说都能很好地工作。

在使用 Laravel 的 Redis 会话之前,您需要通过 Composer 安装 predis/predis 包 (~1.0)。

NOTE

如果您需要加密所有存储的会话数据,请将 encrypt 配置选项设置为 true

NOTE

当使用 cookie 会话驱动时,您绝不应该从 HTTP 内核中移除 EncryptCookie 中间件。如果移除此中间件,您的应用程序将容易受到远程代码注入的攻击。

保留键

Laravel 框架内部使用 flash 会话键,因此您不应以该名称向会话添加项目。

会话使用

可以通过 HTTP 请求的 session 方法、Session facade 或 session 辅助函数访问会话。当不带参数调用 session 辅助函数时,它将返回整个会话对象。例如:

php
session()->regenerate();

在会话中存储项目

php
Session::put('key', 'value');

session(['key' => 'value']);

将值推送到数组会话值中

php
Session::push('user.teams', 'developers');

从会话中检索项目

php
$value = Session::get('key');

$value = session('key');

检索项目或返回默认值

php
$value = Session::get('key', 'default');

$value = Session::get('key', function() { return 'default'; });

检索项目并忘记它

php
$value = Session::pull('key', 'default');

从会话中检索所有数据

php
$data = Session::all();

确定会话中是否存在项目

php
if (Session::has('users'))
{
	//
}

从会话中移除项目

php
Session::forget('key');

移除会话中的所有项目

php
Session::flush();

重新生成会话 ID

php
Session::regenerate();

闪存数据

有时您可能希望仅在下一个请求中存储项目在会话中。您可以使用 Session::flash 方法来实现:

php
Session::flash('key', 'value');

重新闪存当前闪存数据以用于另一个请求

php
Session::reflash();

仅重新闪存闪存数据的子集

php
Session::keep(['username', 'email']);

数据库会话

使用 database 会话驱动时,您需要设置一个表来包含会话项目。以下是表的 Schema 声明示例:

php
Schema::create('sessions', function($table)
{
	$table->string('id')->unique();
	$table->text('payload');
	$table->integer('last_activity');
});

当然,您可以使用 session:table Artisan 命令为您生成此迁移!

php
php artisan session:table

composer dump-autoload

php artisan migrate

会话驱动

会话“驱动”定义了每个请求的会话数据将存储在哪里。Laravel 开箱即用地提供了几个很好的驱动:

  • file - 会话将存储在 storage/framework/sessions 中。
  • cookie - 会话将存储在安全、加密的 cookie 中。
  • database - 会话将存储在应用程序使用的数据库中。
  • memcached / redis - 会话将存储在这些快速的缓存存储中。
  • array - 会话将存储在一个简单的 PHP 数组中,并且不会在请求之间持久化。

NOTE

数组驱动通常用于运行单元测试,因此不会持久化任何会话数据。