`
seaandsky
  • 浏览: 4513 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

rails的session

阅读更多
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管理
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics