现在的位置: 首页 > 综合 > 正文

多机部署rails下的session处理实践

2013年09月15日 ⁄ 综合 ⁄ 共 711字 ⁄ 字号 评论关闭
背景:rails部署在多个机器上,如何处理session?
如果单机部署那么不用理会这个问题,使用系统默认的session机制既可,如果多机情况下就不一样,处理不当很有可能出现, 用户在一台机器已经登陆,结果下次访问另一台机器,可能就会被迫再次登陆(因为这台机器并没有session数据)。用户只管使用,并不关心你的应用如何部署,所以出现这种情况会让用户很困惑,甚至会造成比较严重的后果。

我尝试采用了数据库存储session的方案。即多个rails共享一个数据库中的session表中的纪录。
无论用户访问哪台rails机器,rails都会取出同一行session数据

具体步骤如下:

step 1)修改 environment.rb
加上如下一行代码:
ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS[:database_manager]=CGI::Session::ActiveRecordStore

step 2)在数据库加上如下一张表
CREATE TABLE `sessions` (
  `id` int(11) NOT NULL auto_increment,
  `sessid` varchar(255) default NULL,
  `data` text,
  `updated_at` datetime default NULL,
  PRIMARY KEY  (`id`),
  KEY `session_index` (`sessid`)
) ;

关于session的过期清除
写一个脚本定时删除过期的session纪录,
sql语句如下:
delete from sessions where now()-update_at>3600

抱歉!评论已关闭.