Cakephp default session is saved in the configuration /etc/php.ini,
this was defined in app/config/core.php:
Configure::write('Session.save', 'php');
most likely it looks as below:
session.save_handler = files
session.save_path = "/var/lib/php/session"
this kind of file based session/cache will not work correctly under load balancer/multi web app servers.
the solution is using database or Memcache.
For using Memcache, we should change the config to:
Configure::write('Session.save', 'cache');
and enable the Memcache engine in core.php
Cache::config('default', array(
'engine' => 'Memcache', //[required]
'duration'=> 3600, //[optional]
'probability'=> 100, //[optional]
'prefix' => Inflector::slug(APP_DIR) . '_', //[optional] prefix every cache file with this string
'servers' => array(
'127.0.0.1:11211' // localhost, default port 11211
), //[optional]
'compress' => false, // [optional] compress data in Memcache (slower, but uses less memory)
));
we can check if the memcache has been installed and running by phpinfo() and ps -ef|grep memcache
but unfortunately, even you installed/configured memcache and cakephp well both, this will still not work.
you will lose sessions when navigating pages.
if you enable debug mode, you will see errors in the bottom of the page:
Fatal error: Class 'Debugger' not found in
/var/www/cake/libs/debugger.php on line 252 Warning: Invalid
callback CakeSession::__close, class 'CakeSession' not found in
Unknown on line 0
to solve this problem, you have to apply below patch:
http://cakephp.lighthouseapp.com/projects/42648/tickets/825-debuggerphp-error-when-session-set-to-cache
--- public_html/cake/libs/model/datasources/datasource.php.orig 2010-11-09 15:56:06.897482341 -0600
+++ public_html/cake/libs/model/datasources/datasource.php 2010-11-09 15:57:10.341327526 -0600
@@ -521,6 +521,12 @@ class DataSource extends Object {
$this->rollback($null);
}
if ($this->connected) {
+ if ((Configure::read('Session.save') == 'cache' ||
+ Configure::read('Session.save') == 'database')
+ && function_exists('session_write_close')) {
+ session_write_close();
+ }
+
$this->close();
}
}
本文介绍了CakePHP中会话管理的配置方式,并针对文件系统会话在负载均衡环境下的问题提出了使用Memcache作为会话存储的解决方案。文章还详细解释了如何配置Memcache并修复在特定条件下出现的会话丢失问题。
3747

被折叠的 条评论
为什么被折叠?



