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

时间:2013-04-23 12:32:46

标签: php session session-variables laravel

我正在使用以下行重定向到捆绑中的基本索引操作:

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');

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

当它发生时,两个值立即返回为null。从来没有只设置其中一个的情况。

2 个答案:

答案 0 :(得分:8)

听起来你正在使用cookie会话驱动程序,而且它的空间不足。我建议换到任何其他驱动程序(“内存”除外)。

Laravel 3提供number of session drivers。 'cookie'是默认驱动程序,因为它需要零设置,但它的大小限制为4K。对于任何更严重的事情你应该考虑一个不同的司机为了便于设置...

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

值得一提的是memory驱动程序,这仅适用于测试,因为数据不是持久的(在请求结束时丢失)。

答案 1 :(得分:1)

没关系,我想通了,一旦我注意到Laravel 3中Sessions的cookie驱动程序实际上并没有使用PHP的内置Cookie会话机制,它就开始有意义了,它实际上将整个有效负载存储在cookie中。

由于cookie的大小限制有限,如果存储的总数据超过4K,则此机制会中断,同时记住在会话中存储实际数组的所有“填充”字符。

这也让我意识到我的应用程序的设计有问题,我不应该向会话中闪现如此庞大的数据。