CakePHP在页面之间删除会话

时间:2009-12-29 11:15:29

标签: php session cakephp

我有一个包含多个区域和各种传入链接的应用程序。以前的工作原理是,在app_controller中,我将这些传入链接分解并在会话中设置它们。

所以我在 app_controller 中有一个巨大的 beforeFilter(),它会捕获这些并在会话中设置两个变量。 Viewing.region和Search.engine,没问题。

出现问题的是,会话似乎不会持续跨页面请求。例如,转到 / reviews / write(userReviews / add)应该有一个可用的会话,该会话是在用户到达站点时设置的。虽然它似乎已经消失了!

除非在 app_controller 中明确捕获 $ this-> params 并写入会话变量,否则它似乎不存在于其他页面上。

到目前为止,我已经尝试过,在'cake'和'php'中存储会话之间交换似乎都表现出相同的行为。我使用'php'作为默认值。我的 Session.timeout 为'120', Session.checkAgent 为False, Security.level 为'low'。所有这些都应该给框架足够的宽容,使会议有最大的居住空间!

我有点难过为什么在请求新页面时会话似乎被重新创建或空白。我已经注释掉 requestAction()调用,以确保不会混淆会话请求对象,这似乎没有什么区别。

任何帮助都会很棒,因为我不必重新编码站点以通过url中的参数传递所有各种变量,因为这样会很糟糕,并且之前有效,因此启用 $在我的所有代码中,这都是> Session-> read('Viewing.region')

7 个答案:

答案 0 :(得分:1)

尝试将/app/config/core.php文件中的安全设置设置为中等或低。这解决了我遇到的会话问题。

答案 1 :(得分:1)

我有解决方案或至少为我工作

你试图从控制器审查传递动作写入控制器userReviews动作添加权限???

检查你的控制器userReviews必须结束whit php标签“?>”并且没有更多的空间

如果你有这样的话

line
999 //more code lines
1000 ?>
1001

您的会话失败

你必须有这个

line
999 //more code lines
1000 ?>
抱歉我的英语不好 你好

答案 2 :(得分:0)

  

看起来除非   $ this-> params被明确捕获    app_controller 和一个会话   变量写的,它不存在   其他页面。

这听起来像是正确的行为,除非您在页面之间发布数据。如果您希望任何变量持久化,则应该在模型中设置它(它将与关联持久存在),或者在函数中传递,或者使用会话组件显式设置在会话中:

$this->Session->write('Viewing.region');

(见:http://book.cakephp.org/view/398/Methods

在相关的说明中,我在存储在数据库中的会话取得了最大的成功。从app / config运行该文件并将其设置为db。看看是否有帮助。

另外,会话的Cake核心测试是否有效?

答案 3 :(得分:0)

可能是this problem?从本质上讲,如果用户代理发生变化,cake会话将重置 很遗憾我遇到了你几天前提到的这个问题,现在我找不到帮助我解决这个问题的链接。

另外:您使用的是数据库还是纯PHP会话?

答案 4 :(得分:0)

我不会在这里看到你的代码,但是你的“评论”控制器(或其他)可能有自己的beforeFilter()并且不会调用它parent的beforeFilter()显式?

这之前我已经烧了......

答案 5 :(得分:0)

我遇到了一些这样的问题。使用某个控制器的会话集在另一个控制器中不可用。花了几个小时后,我可以清除这个问题。在底部的php标签的末尾有一个空白区域。清除最后一行后的行和空白?> 标签工作正常。

答案 6 :(得分:0)

移动CakePHP网站时遇到此问题。我的问题是会话目录不可写。您应确保文件夹app / tmp及其所有子文件夹(包括会话)具有权限777。