rails本身有对session的支持,但对session的管理确不人性化,当系统运行长后必然会产生大量的session文件。因此,需要动态的实现对session的管理
方法:
1、将如下代码拷贝后保存为sessionmgr.rb文件存储的到config目录下
module Sessionmgr
#启动session管理器,在超出时间timeout后,清除session
def start_mgr(timeout = "10m")
puts "start session manager, time=#{timeout}";
#构造等待时间
time = make_time(timeout);
#构造session管理线程
sm_thd = Thread.new(time) do |tm|
while 1
#删除系统过期session文件
dir = nil;
begin
#打开目录
dir = Dir.open("tmp/sessions");
#处理文件
dir.each do |dr|
#超时session,进行删除
if(dr =~ /^ruby_sess/ and (Time.now() - File.atime("tmp/sessions/#{dr}")) > time)
puts "clean session: #{dr}";
File.delete("tmp/sessions/#{dr}");
end
end
ensure
#关闭目录
dir.close if dir;
end
#十秒进行一次搜索
sleep 10;
end
end
end
private
#构造等待时间
def make_time(timeout)
#去掉空格和转换为小写
timeout = timeout.to_s().downcase().strip();
#如果时间匹配,进行转换,否则返回默认值10分钟
if ((timeout =~ /\d+[smhd]/) == 0)
time = timeout.to_i;
#计算单位
time *= case timeout[timeout.length-1, 1]
when 's': 1
when 'm': 60
when 'h': 60 * 60
when 'd': 24 * 60 * 60
else 1
end
else
10 * 60;
end
end
end
2、在environment.rb中加入如下代码
#导入session管理包
require "sessionmgr"
#包含模块Sessionmgr
include Sessionmgr
#启动session管理
Sessionmgr::start_mgr();
3、系统将自动进行sessiong管理