[英]CakePHP 2.6, Redis session/cache being destroyed on redirect
我正在将我们的项目从Centos-6 / Apache 2.0 / PHP5.3 / Cake 2.0 / File Cache(6/3/2/0 / F)升级到Centos-7 / Apache 2.4 / PHP5.6 / Cake 2.6 / Redis缓存和会话(7/6/4/6 / R)。
如果我将7/6/4/6 / R留在File Caching和php会话中,则升级效果很好,符合预期。 但是我已经按照一些教程安装了Redis,并且所有功能都可以从PHP 5.6识别Redis的目的开始,CakePHP在test.php中获得18个测试通过18次,但是Redis会话在重定向上被破坏了。
Core.php
//Replaces standard
Configure::write('Session', array(
'defaults' => 'cache',
'timeout' => '100',
'start' => true,
'checkAgent' => false,
'handler' => array(
'config' => 'session'
)
));
//Engine
$engine = 'Redis';
//Bottom of Core
Cache::config ('session', array (
'Engine' => $engine,
'Prefix' => $prefix . 'cake_session_',
'Duration' => $duration
));
Bootstrap.php
Cache::config('default', array('engine' => 'Redis'));
AppController.php
public $components = array(
'Session',
'Auth' => array(
'loginRedirect'=>array('controller' => 'companies', 'action' => 'view'),
'logoutRedirect'=>array('controller' => 'users', 'action' => 'login'),
'loginAction'=>array('controller' => 'users', 'action' => 'login'),
'authenticate' => array(
'Form' => array(
'userModel' => 'User',
'fields' => array('username' => 'email', 'password' => 'password')
)
)
));
UsersController.php-登录功能-来自博客示例的C&P
if ($this->request->is('post')) {
if ($this->Auth->login()) {
//print_r($_SESSION);die();
return $this->redirect($this->Auth->redirectUrl());
}
$this->Session->setFlash(__('Invalid username or password, try again'));
}
将打印预期的和整个会话数组的key => values。 完善!!! 现在,如果我让重定向通过。
CompaniesController.php
public function view($id = null) {
print_r($_SESSION);
}
不包含键=>值。
有两个额外的项目要检查。 修改这些内容后,Redis与Cake 2.6.4完美配合。
1)重新验证您的phpinfo()并确保没有阻止全局php.ini设置的本地会话变量。 我的人来自httpd的php.conf。
2)确实需要添加session_start(),即使CakePHP文档指出如果使用了Session或Auth的已加载组件,您也不必使用此命令。 我将命令放在webroot的第一行。
您需要在重定向之前调用session_write_close,就像在__destroy上内部调用的session_write_close一样。
但是,在您发送“ Location:”标头之后,就会发生此事件。
在AppController中尝试以下操作:
public function redirect($url, $status = null, $exit = true) {
if ($exit && $this->Components->enabled('Session') && $this->Session->started()) {
session_write_close();
}
return parent::redirect($url, $status, $exit);
}
Cake3中仍然存在相同的问题。 在symfony2中,此问题已修复-在重定向会话组件关闭自身之前。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.