Laravel 3的闪存变量并不总是在Session中


Laravel 3 flashed variables are not always in the Session

我使用下面的行来重定向到我在bundle中的基本索引操作:

return Redirect::to_action('mybundle::base@index')->with("prevCommands", $prevCommands)->with("result", $result)->with_input();

重定向工作,但当我从会话抓取信息时,我随机得到空值,以下代码是在我的索引操作:

$view['prevCommands']  = (array)Session::get('prevCommands');
$view['result']        = (string)Session::get('result');

上面的组合似乎只是随机工作,如果服务器需要更长的时间来响应,它往往工作得更好。在重定向之前,我一直检查变量是否正确填充。

当它发生时,两个值同时返回为空。不可能只设置其中一个。

听起来您正在使用cookie会话驱动程序,并且它已耗尽空间。我建议改用其他驱动程序(内存除外)。

Laravel 3提供了许多会话驱动程序。'cookie'是默认驱动程序,因为它需要零设置,但它的大小限制为4K。对于任何更严重的情况,你应该考虑换一个司机。

  • file将每个会话保存为存储/会话中的文件,因此您需要确保该位置是可写的,并且如果您在共享服务器上,则它具有适当的权限。
  • database在默认数据库连接中使用一个表,文档描述了必要的模式。memcached和redis使用各自的服务,它们不需要太多的设置,一旦你有了服务安装和工作。

值得一提的是内存驱动程序,这只对测试有用,因为数据不是持久的(在请求结束时丢失)。

没关系,我弄明白了,当我注意到Laravel 3中会话的cookie驱动程序实际上并没有使用PHP内置的cookie会话机制时,它开始有意义了,它实际上将整个有效载荷存储在cookie中。

由于cookie具有有限的大小允许,因此如果存储的总数据超过4K,则该机制将中断,请记住在会话中存储实际数组的所有"填充"字符。

这也让我意识到我的应用程序的设计是错误的,我不应该将如此大量的数据闪现到会话