`
a420144030
  • 浏览: 83679 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Rails 中session存储问题

阅读更多

Rails Session Store

 

session 一直用 FileStore 存储,但是当session存储的东西太多会数据溢出,cookie 的存储的最大值为4k,于是转用 ActiveRecordStore ,这样一方面提高效率,之前的 session 全部以文件形式存储查找慢,用数据建立索引可以加速。另一方面多 server 做 load balance 之后每次请求都可能会在不同的 server 上跳,会出现找不到 session 的情况。这样全部使用统一的 DB 做存储,各个请求之间不共享任何东西,我们也就不用在 web 层和应用层维护任何状态,状态的维护工作被我们放在了一个特定的整合点上,这个叫无共享架构(share-nothing architecture)

Yahoo 这样用 PHP,LiveJournal 这样用 Perl,我们这样用 ROR~ 上面提到的整合点最简单的应该是 ActiveRecordStore,此外还可以用DRbMemcached

使用 ActiveRecordStore 存储 session 第一步建一张存 session 的表,如果你用了 migration,直接rake db:sessions:create 就可以了,自己见表的话用以下 sql

create table sessions (
id int(11) not null auto_increment,
sessid varchar(255),
data text,
updated_at datetime default null,
primary key(id),
index session_index (sessid)
);

然后编辑 config/environment.rb 或者 config/environments/production.rb:

config.action_controller.session_store = :active_record_store

一共两步,搞定 ^-^ 重启 server,访问一下,查查数据库,有了!(Whisper 说 mysql 有内存表,会更快)

删除以前的那些文件 session,这个东西可以删除12小时前的session:

find tmp/sessions -name ‘ruby_sess*’ -ctime +12h -delete

数据库 session 表的删法还要在研究一下 TOT

[Update] 定时删除 session 有一个扩展 ActiveRecord::Session 的方法我没搞出来,后来干脆直接在 crontab 里加了一个任务,执行删除 session 的一个脚本

#!/bin/sh
mysql database_name -uuser_name -ppassword << eof
delete from sessions where date_sub(now(), interval 6 hour) > updated_at and bit_length(data) <= 688;
eof

exit 0;

分享到:
评论

相关推荐

    activerecord-session_store, 从 Rails 中提取的记录存储的活动会话.zip

    activerecord-session_store, 从 Rails 中提取的记录存储的活动会话 Active Record 会话存储由 Active Record 类支持的会话存储。 提供了默认类,但是任何对 Active Record 会话类的对象鸭类型都有文本 session_id ...

    activerecord-session_store:从Rails中提取的Active Record的会话存储

    然后,在config/initializers/session_store.rb设置会话存储: Rails . application . config . session_store :active_record_store , :key =&gt; '_my_app_session' 为了避免会话表无限扩展,因为它会存

    rails敏捷开发的购物车系统

    Rails提供了Session存储,可以用来临时存储用户的购物车信息,但这种存储方式不适用于持久保存。因此,通常我们会将购物车内容存入数据库,以便用户在不同会话之间保持购物车状态。在添加或删除商品时,更新购物车...

    rails 项目起步示例

    9. **tmp**:临时文件存储,如缓存、session等。 10. **vendor**:第三方库和依赖项的存放位置。 在购物系统(shopping_system)这个项目中,你可能会遇到以下概念和技术: - **ActiveRecord**:Rails内置的ORM...

    web开发之rails最新调试通过购物车代码

    5. **会话(Session)**:Rails中的会话管理允许在多个请求之间保持状态,这对于购物车尤为重要,因为用户可能需要在不同时间查看或修改购物车。 6. **数据库迁移(Database Migrations)**:Rails提供了方便的工具...

    plug_rails_cookie_session_store:与Rails兼容的插件会话存储

    标题中的"plug_rails_cookie_session_store"是一个针对Rails框架的会话存储插件,它旨在在Elixir的Phoenix框架中实现与Rails相兼容的会话管理。这个插件的目的是让那些从Rails迁移到Elixir Phoenix的应用程序能够...

    Web开发敏捷之道--应用Rails进行敏捷Web开发 之 Depot代码。

    标题中的“Web开发敏捷之道--应用Rails进行敏捷Web开发 之 Depot代码”表明这是一个关于使用Ruby on Rails框架进行敏捷Web开发的示例项目,名为Depot。Ruby on Rails(简称Rails)是一个开源的Web应用程序框架,它...

    关于Rails登录和验证插件http_authentication restful-authentication

    1. **Session**: 在Rails中,session用于在客户端浏览器和服务器之间存储临时状态。当用户成功登录后,会话ID会被存储在用户的cookie中,服务器根据这个ID识别用户,从而实现会话持久化。 2. **哈希和加密**: 为了...

    Ruby-RailsFootnotes在每一个Rails页脚展示应用程序的相关信息方便调试

    在开发过程中,调试是必不可少的一部分,为了帮助开发者更有效地定位问题,Rails社区创建了多种辅助工具,其中之一便是Rails Footnotes。Rails Footnotes是一个插件,它可以在每个Rails页面的页脚处显示详尽的应用...

    ruby on rails 教程

    - **Session**:讲解了Session的概念、存储方式及管理策略,包括如何将模型实例存储在Session中,以及如何自定义Session的存储位置(如内存、数据库、缓存服务器等)。 - **Cookies**:解释了Cookies的工作原理,...

    Rails 3 in Action

    书中第二章提到 **测试驱动开发(TDD)** 和 **行为驱动开发(BDD)**,这两种方法是 Rails 社区广泛采用的测试策略。 - **测试驱动开发(TDD)**: - 测试先行:先编写测试用例,再编写满足这些测试的代码。 - 循环...

    Struts2和Rails的国际化实现

    5. **动态切换语言**:Rails允许用户通过设置`I18n.locale`来切换语言,通常在会话中存储用户的语言首选项。 6. **时间、日期和数字的本地化**:Rails的i18n库还支持日期、时间、数字和其他格式的本地化。 总结来...

    redis-session-store:一个基于Redis的Rails的简单会话存储

    redis-store是一种千篇一律的解决方案,我发现它不能与Rails一起正常使用,这主要是由于问题似乎出在Rack的Abstract::ID类中。 我想要一些有效的方法,所以我公然从Rails的MemCacheStore窃取了代码,并将其转换为...

    mongo_session_store:MongoSessionStore是使用Mongoid或MongoDB Ruby驱动程序的MongoDB的Rails兼容会话存储。 它还允许与任何(或不!)Mongo ODM一起使用的自定义Mongo会话存储。

    有关Rails 3的支持,请查看问题了解选项,并让我们知道您是否需要支持。 安装 将mongo_session_store gem添加到您的Gemfile 。 结合使用mongo或mongoid宝石。 # Gemfile gem "mongoid" # or gem "mongo" gem ...

    ruby on rails入门

    - **简介**:Rails 采用了 Model-View-Controller (MVC) 设计模式,这种模式将应用程序分为三个核心部分:模型(Model)负责数据逻辑和存储;视图(View)负责用户界面;控制器(Controller)则管理用户输入并调用相应的...

    rails登陆画面(原)

    Rails的`session_store`负责存储会话数据。 8. **测试**:编写测试用例,确保登录功能的正确性,包括成功登录、失败登录、无效的会话等场景。 9. **错误处理**:当用户输入错误时,如密码不匹配或账号不存在,需要...

    rails实现验证码实例

    4. **存储验证码值**:在生成验证码后,将其值存储到session或cookie中,以便在用户提交表单时进行验证。 5. **视图展示**:在Rails视图中,通过控制器提供的方法将验证码图像渲染到页面上。例如,创建一个名为`...

    pretender, 在 Rails 中作为另一个用户登录.zip

    在 Rails 应用程序中,通常用户的登录状态是通过 session 或者 cookie 来维护的。当用户登录后,这些信息会被存储,然后在后续请求中用来验证用户身份。然而,如果想以管理员的身份查看并模拟另一个用户的行为,传统...

Global site tag (gtag.js) - Google Analytics