Laravel Redis 会话驱动程序不起作用

Posted

技术标签:

【中文标题】Laravel Redis 会话驱动程序不起作用【英文标题】:Laravel Redis Session Driver doesn't work 【发布时间】:2013-12-20 22:09:22 【问题描述】:

我在使用 laravel 4“redis”会话驱动程序时遇到了困难。 问题是没有实际存储。

我检查过的东西:

我已在 Session-config 文件和 cache-config 文件中将驱动程序设置为 redis 在 database-config 文件中指定了 redis 的数据库配置:

我尝试使用 redis 类手动存储一些东西,确实有效,使用会话类存储不起作用

// this is in my session config
'driver' => 'redis',

//this is my db-config
'redis' => array(

    'cluster' => true,

    'default' => array(
        'host'     => '127.0.0.1',
        'port'     => 6379,
        'database' => 0,
    ),

),


//this works
$redis = Redis::connection();
$redis->set('name', 'Taylor');

//this doesn't work
Session::put('name', 'Taylor');

当我将会话更改为 native 时,它可以工作

任何帮助将不胜感激

更新 那很有意思: 当我按照@philo 的建议使用redis-cli monitor 时,我在尝试登录我的L4 应用程序时得到了一些输出:

`1387191809.513730 [0 127.0.0.1:59268] "SELECT" "0"
1387191809.513835 [0 127.0.0.1:59268] "GET" "laravel:siau639prmckja34le11vbsfl7"
1387191809.863851 [0 127.0.0.1:59268] "SET" "laravel:siau639prmckja34le11vbsfl7" "s:226:\"_sf2_attributes|a:2:s:6:\"_token\";s:40:\"9LPf354C2ZNtw0Oc1zyafSvMdFFlspPiJsq8w90v\";s:5:\"flash\";a:2:s:3:\"old\";a:0:s:3:\"new\";a:0:_sf2_flashes|a:0:_sf2_meta|a:3:s:1:\"u\";i:1387191809;s:1:\"c\";i:1387191809;s:1:\"l\";s:1:\"0\";\";"
1387191809.866655 [0 127.0.0.1:59268] "EXPIRE" "laravel:siau639prmckja34le11vbsfl7" "0"
1387191828.464840 [0 127.0.0.1:59279] "SELECT" "0"
1387191828.464970 [0 127.0.0.1:59279] "GET" "laravel:siau639prmckja34le11vbsfl7"
1387191828.581774 [0 127.0.0.1:59279] "SET" "laravel:siau639prmckja34le11vbsfl7" "s:599:\"_sf2_attributes|a:4:s:6:\"_token\";s:40:\"KSkc5OAsp9Psz3MC7dYo6FfkTvcdK6I6HcisSyJ3\";s:10:\"_old_input\";a:3:s:6:\"_token\";s:40:\"9LPf354C2ZNtw0Oc1zyafSvMdFFlspPiJsq8w90v\";s:8:\"username\";s:10:\"bertcasier\";s:8:\"password\";s:4:\"test\";s:5:\"flash\";a:2:s:3:\"new\";a:0:s:3:\"old\";a:2:i:0;s:10:\"_old_input\";i:1;s:6:\"errors\";s:6:\"errors\";O:29:\"Illuminate\\Support\\MessageBag\":2:s:11:\"\x00*\x00messages\";a:1:s:7:\"general\";a:1:i:0;s:48:\"Ongeldige gebruikersnaam/wachtwoordcombinatie...\";s:9:\"\x00*\x00format\";s:8:\":message\";_sf2_flashes|a:0:_sf2_meta|a:3:s:1:\"u\";i:1387191828;s:1:\"c\";i:1387191828;s:1:\"l\";s:1:\"0\";\";"
1387191828.582214 [0 127.0.0.1:59279] "EXPIRE" "laravel:siau639prmckja34le11vbsfl7" "0"
1387191828.613536 [0 127.0.0.1:59284] "SELECT" "0"
1387191828.613649 [0 127.0.0.1:59284] "GET" "laravel:siau639prmckja34le11vbsfl7"
1387191828.653734 [0 127.0.0.1:59284] "SET" "laravel:siau639prmckja34le11vbsfl7" "s:226:\"_sf2_attributes|a:2:s:6:\"_token\";s:40:\"SMxXljPLDaViVVSpCohfOKlpByhjp8E2ywS6zVkh\";s:5:\"flash\";a:2:s:3:\"old\";a:0:s:3:\"new\";a:0:_sf2_flashes|a:0:_sf2_meta|a:3:s:1:\"u\";i:1387191828;s:1:\"c\";i:1387191828;s:1:\"l\";s:1:\"0\";\";"
1387191828.654102 [0 127.0.0.1:59284] "EXPIRE" "laravel:siau639prmckja34le11vbsfl7" "0"
1387191878.208814 [0 127.0.0.1:59358] "config" "get" "databases"
1387191878.215094 [0 127.0.0.1:59358] "INFO" "keyspace"
1387191880.176125 [0 127.0.0.1:59358] "select" "0"
1387191880.176314 [0 127.0.0.1:59358] "keys" "*"`

似乎我的会话立即到期? 我编写了一个自定义的身份验证用户提供程序,它将我登录到一个 rest-API 中,并将结果存储在会话中。但是当我使用 redis 会话驱动程序时,我会立即被重定向回登录页面。当我使用 RDM(redis 客户端 GUI)时,我找不到任何会话变量

【问题讨论】:

你使用的是 Laravel 4.0 还是 4.1?如果您使用的是 4.1,请尝试将集群设置为 false 我使用的是 4.0.8。我尝试打开和关闭集群,但没有帮助 您在运行redis-cli monitor 时是否在控制台中看到任何活动? @philo 我尝试使用您的命令。我可以看到输出,所以 REDIS 连接似乎有效,但我猜一切都会立即过期?我已经用输出更新了问题。感谢您的提示! 【参考方案1】:

您必须使用 middlewareGroups - Laravel 5.2 将您的路由附在控制器中

Route::group(['middlewareGroups' => ['web']], function () ... );

【讨论】:

【参考方案2】:

现在我还在寻找如何在浏览器关闭时过期

请注意,cookie 的生命周期与会话数据无关。您希望 cookie 的生命周期为 0(在浏览器关闭时删除)并且会话数据的生命周期更长(只要您在请求之间允许)。

【讨论】:

【参考方案3】:

感谢@philo 的提示,我找到了解决方案。

我的配置文件中的会话生命周期设置为zero,因为我希望我的会话在浏览器关闭时过期。这适用于本机会话,但对于 redis 会话,它会导致会话立即过期。当我更改生命周期时,我的会话按预期工作。

现在我还在寻找如何在浏览器关闭时过期

【讨论】:

嘿,你是如何设法将 redis 设置为会话的,我应该设置什么配置?

以上是关于Laravel Redis 会话驱动程序不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5 - 会话不起作用

会话在中间件 Laravel 5 中不起作用

使用ajax调用的角度保存变量到laravel会话不起作用

在同一控制器中以其他方法访问会话数据在 laravel 中不起作用

laravel 事件应该广播不起作用

为啥 Laravel 4 CSRF 令牌不起作用?