sessiond的简单介绍与相关用法

来源:互联网 发布:绘制示意图软件 编辑:程序博客网 时间:2024/05/29 19:09
session   简单来说,就是用于保存数据放在cookies中或者数据库中,至于放在那里更好,在下面有详细的解释。

session 的缺点:很难控制session的有效使用时间、存储量大小等后续问题。

1.使用范围
  controller和view中可用

2 session 的创建  

(1)rake db:sessions:create    //创建session表(2)rake db:migrate
(3)在config/initializers/session_store.rb中把下面语句的注释去掉,目的是要告诉rails使用ActiveRecord去管理session
   Rails.application.config.session_store :active_record_store  
(4)然后重启一下服务器就可以运行了

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

      session[:update_user_id] = nil

3 session保存的数据  

  ◇一般保存会话进行的必要数据,如保存登录用户的的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数据存到数据库中比较妥当。



 


0 0
原创粉丝点击