【问题标题】:CakePHP: where to set default session values?CakePHP:在哪里设置默认会话值?
【发布时间】:2012-12-21 21:30:57
【问题描述】:

我有一个使用 CakeSession 来保存不同用户数据的应用。现在我想使用CakeSession::write() 编写一些默认值,并让它们可用于所有视图(也可用于缓存视图)。因此,应该在呈现视图之前对每个请求进行检查/写入。

但是在哪里放置符合这些要求的代码呢?到目前为止,我尝试了以下位置使用CakeSession::write(),但没有成功:

  1. Config/bootstrap.php -> CakeSession 尚未定义
  2. AppController::__construct() -> CakeSession 尚未定义
  3. AppController::beforeFilter() -> 不会为缓存视图调用

【问题讨论】:

  • 您可以将'callbacks'=>true 作为cacheAction 的参数传递,从而触发beforeFilter
  • @Ross 感谢您提供此信息。我认为这是一个可能的解决方案。您能谈谈触发回调时缓存文件的性能吗?
  • 您必须自己进行基准测试,涉及的因素太多。这听起来有点像过早的优化 - 请注意,但要等到它成为问题后再过分担心。
  • 我只是问,因为我期望对性能产生更大的影响。但一切都像一个魅力。谢谢!

标签: cakephp cakephp-2.2


【解决方案1】:

缓存视图不会在任何地方创建会话。缓存视图根本不初始化请求

docs

It should be noted that once an action is cached, the controller method for the 
action will not be called. When a cache file is created, the request object, 
and view variables are serialized with PHP’s serialize().

【讨论】:

  • 为什么不呢?助手将在缓存视图中加载。使用 SessionHelper 将使 CakeSession 在此视图中可用。所以在<!--nocache-->标签中可以毫无问题地调用CakeSession的方法。
  • 供阅读。发送输出后,您无法写入会话,并且当您处于 <!-- nocache --> 时,输出已发送。
  • 在“无缓存”部分中,您应该只从会话中读取。例如,如果您需要更持久地存储某物,您可以通过 JS/jquery 写入 cookie。
  • CakeSession::write() 也可以在<!--nocache--> 中。这些标签仅在缓存 (php) 文件中使用。它们在视图渲染期间被删除,所有这些都发生在输出之前。因此,一种可能的解决方案是在<!--nocache--> 中创建一个元素并将所有CakeSession::write() 代码放入该元素中。但是元素是写入会话数据的正确位置吗?我的意思是这是一个视图...
  • 您不应该在视图或元素中写入会话数据。
猜你喜欢
  • 1970-01-01
  • 2015-10-27
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多