2016-08-03 88 views
0

我正在基于cakephp 3开发一个基于php和mysql的处理器和内存使用方面的中等程度的项目,但为用户提供99%的时间完全相同的页面。Session已经开始

所以我决定喜欢使用像我几年前开发的this one这样的缓存系统。它只是保存完整页面的缓存html文件,避免对每个请求做所有的详细说明。这是一个愚蠢的系统,但它的工作非常好。

问题是,我需要访问会话变量进行一些检查。要做到这一点我触发session_start()在我的缓存系统,有时CakePHP的抛出这个错误时的页面是不是已经被缓存:

Session was already started 

我怎样才能避免这个错误?有没有办法在我的缓存系统中关闭会话,以便cakephp最终可以启动一个新的?我曾尝试与session_abortsession_register_shutdown(),但没有工作,我甚至不知道这是做什么,我需要正确的方法...

编辑:处理流程是:请求 - >缓存系统 - > cakephp。因此,我的session_start()出现在cakephp之前,我倾向于不要碰到cakephp核心文件,这就是为什么其他问题对我没有用处。我想在我的缓存系统中解决这个问题。

+1

这不是一个重复的,至少不是http://stackoverflow.com/questions/10093264/load-session-start-only-if-session-does-not-exist的副本,如“问题”位于CakePHP内核中,不能简单地像用户级代码那样更改,这应该以不同的方式修复。 – ndm

+0

不管是关闭会话还是让CakePHP再次打开它是“_正确的方式_”,使用'session_abort()',“_doesn't work_”究竟发生了什么可能意味着什么? (它应该工作) – ndm

回答

0

您可以在尝试调用session_start()之前检查会话是否已经开始。

if(!isset($_SESSION)) { 
    session_start(); 
} 
+0

流程是:请求 - >缓存系统 - > cakephp。所以我的session_start出现在cakephp之前,我不想触碰cakephp核心文件,这就是为什么其他问题对我没有用处。我想在我的缓存系统中解决这个问题。 –

+0

@ ToX82噢,好的。这是这个问题的重要信息。 – iyop45

+0

你是对的:)我用这些信息编辑了这个问题,谢谢你的回答 –