Rails3 session应用

        开发时遇到需要带参数的页面跳转。可以使用http中get方法直接跟参数的形式去完成这个小问题,但是看着整个url很长很杂,所以想到了session来解决这个问题。在rails3中,session用法不难,难的是要控制session的有效使用时间、存储量大小等后续问题。

1.使用范围
  controller和view中可用
2.保存的数据
  ◇一般保存会话进行的必要数据,如保存登录用户的的ID:
   user = User.find_by_name(params[:name]) 
   session[:user_id] = user.id  if user

  ◇尽量不要直接保存类实例到session里面。因为如果这个实例对应的表数据被更新,
    而没有同时更新session里保存的该实例,以后参照的session里的数据将成为旧的。
    如:
    ⇒    user = User.find_by_name(params[:name])   #假设初值为 用户名="xxx"
          session[:current_user] = user if user      #session[:current_user].name="xxx"
    ⇒    处理过程中用户修改了自己的name为"yyy"     #用户名="yyy"
          而程序对session没做任何处理
    ⇒    之后参照session里的用户名                 #session[:current_user].name="xxx"
  ◇session保存形式
    默认情况下rails程序的session数据保存在cookie中。
    会话最早建立的时候WEB程序把cookie发给客户端浏览器,
    之后每次客户端提交请求时浏览器都会把cookie的数据一起提交给服务器,用于验证。
    但是推荐把session数据保存到数据库中,原因:
    1.rails2.3.5中cookie中保存数据不能超过4k,否则会报异常。
    2.大型系统的WEB服务器一般为了负载平衡会使用几台服务器分担处理。
    这样同一个会话的几次请求可能会被分配到不同的服务器去。
    为了使各服务器能共享session的数据,所以把session数据存到数据库中比较妥当。

    (参考:http://goldyrain.blog.hexun.com/46941830_d.html

一:创建

创建session表:

rake db:sessions:create

执行migration:

rake db:migrate

config/initializers/session_store.rb中把下面语句的注释去掉,目的是要告诉rails使用ActiveRecord去管理session。

Rails.application.config.session_store :active_record_store

然后重启一下服务器就可以运行了。

二、具体运用

下面是ROR+Ext的应用,具体是把一些参数赋值给session。



长长的url,后面带着参数:

http://localhost:3000/purchasing_orders/new?ids=[1,2,6,7,8,10,13,14,15]
应用上面方法简洁了:

http://localhost:3000/purchasing_orders/new


注意:使用session要注意适时清除与限制。 清除session可以直接赋空值:

session[:yr_ids] = nil

三、拓展

提供有几个学习链接:

Ruby On Rails Security Guide  http://guides.rubyonrails.org/security.html

Share sessions between Rails 2 and Rails 3 applications   http://blog.kabisa.nl/2010/10/27/share-sessions-between-rails-2-and-rails-3-applications/


  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值