CakePHP在页面之间删除会话

CakePHP在页面之间删除会话,php,session,cakephp,Php,Session,Cakephp,我有一个具有多个区域和各种传入链接的应用程序。前提是,在app_控制器中,我断开这些传入链接,并在会话中设置它们 因此,我的app_控制器中有一个巨大的beforeFilter(),它捕获这些内容并在会话中设置两个变量。查看.region和Search.engine,没问题 出现的问题是,会话似乎不能跨页面请求持久化。因此,例如,转到/reviews/write(userReviews/add)应该有一个会话可用,该会话是在用户到达站点时设置的。虽然它似乎已经消失了 除非在app_控制器中显式捕

我有一个具有多个区域和各种传入链接的应用程序。前提是,在app_控制器中,我断开这些传入链接,并在会话中设置它们

因此,我的app_控制器中有一个巨大的beforeFilter(),它捕获这些内容并在会话中设置两个变量。查看.region和Search.engine,没问题

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

除非在app_控制器中显式捕获$this->params并写入会话变量,否则它似乎不存在于其他页面上

到目前为止,我已经尝试过了,在“蛋糕”和“php”中存储会话之间的切换似乎都表现出相同的行为。我使用“php”作为默认值。我的Session.timeout为“120”,Session.checkAgent为False,Security.level为“低”。所有这些都应该给予框架足够的宽大,让会话有最大的生存空间

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


任何帮助都会很好,因为我不必重新编码站点以通过url中的参数传递所有各种变量,因为这会很糟糕,而且它以前也工作过,因此在我的所有代码中打开$this->Session->read('Viewing.region')

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

看来除非 $this->params在 应用程序控制器和会话 变量已写入,但在上不存在该变量 其他页面

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

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

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


另外,课程的核心测试是否有效?

我已经找到了解决方案,或者至少可以解决这个问题

您尝试从控制器评论操作写入传递到控制器用户评论操作添加对吗

检查控制器userReviews是否必须以php标记“?>”结尾,并且没有更多空间

如果你有这样的事情

line
999 //more code lines
1000 ?>
1001
您的会话失败

你必须有这个

line
999 //more code lines
1000 ?>
对不起,我英语不好 你怎么会这样呢?本质上,如果用户代理发生更改,cake的会话将重置 很遗憾,我遇到了你几天前提到的这个问题,现在我找不到帮助我解决这个问题的链接


另外:您使用的是数据库会话还是普通的php会话?

我将在这里冒险,无法查看您的代码,但您的“reviews”控制器(或其他什么)是否可能有自己的beforeFilter(),而不显式调用其父级的beforeFilter()


这让我很恼火…

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

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

您是否在使用会话存储(例如在数据库中)进行任何非标准操作,或者是否在使用任何代理/负载平衡软件?您是否能够在PHP中正常使用会话(例如,不使用cake框架)?在我看来,你的Apache/PHP实例实际上并没有将会话写入磁盘,因此当PHP进程释放其内存分配时,它们就丢失了。我没有使用数据库,但我尝试在app/config/core中使用“cake”作为会话处理程序,文件创建得很好,并且保持相同的PHP会话id,所以我假设它正在编写会话。我不认为有任何负载平衡,因为它是一个单一的服务器,但我不太确定。你能使用传统的PHP方法跨请求读/写会话吗?例如,我通过在URL中传递所有会话变量作为参数,解决了这个问题。它很凌乱,但它能工作!如果在页面上打印$\u SESSION和SESSION\u id(),您会得到什么?我正在使用app\u控制器中的$this->SESSION->write设置会话,但一旦写入,我希望它能够在页面间持久存在,但它似乎没有这样做。当您为Cake Core运行会话单元测试时会发生什么?尝试通过调试($this->Session)将beforeRender拖放到应用程序控制器中;注意:-它应该始终在顶部显示SessionComponent对象-在每页之间注意对象变量的值。有时,您会看到没有以其他方式显示的错误。您也可以省去结束的PHP标记?>,这将防止这种情况发生,并且是完全合法的(如果您经常在其他文件中包含文件,则建议这样做)。出现问题的原因是空间导致内容在脚本中可能发送的头(以及cookie)之前发送到客户端。这只会在使用cookie缓解会话持久性时影响会话。我在localhost中遇到此问题,并且我的操作系统是widows XP,我认为此问题不是来自权限。您肯定不希望