ruby-on-rails – Rails 3:将活动记录中的会话保存(不是cookie)

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Rails 3:将活动记录中的会话保存(不是cookie)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我拖了大约一个小时左右的谷歌大学,但没有关于这个话题的唯一好的文件:-(希望有人可以帮助,我愿意买一本书,只要有人能告诉我哪一个.

我正在使用以下版本:

> rails 3.2.6,
> ruby​​ 1.9.3p194(2012-04-20修订版35410)[x86_64-darwin11.4.0]

要开始在Active Record中使用会话存储而不是cookie,我做了以下:

>更新config / initializers / session_store.rb.
评论第一行,取消注释最后一行,所以我有:

# Be sure to restart your server when you modify this file.

# Myapp::Application.config.session_store :cookie_store,key: '_elegato_session'

# Use the database for sessions instead of the cookie-based default,# which shouldn't be used to store highly confidential information
# (create the session table with "rails generate session_migration")
Myapp::Application.config.session_store :active_record_store

> rake db:sessions:create

invoke  active_record
  create    db/migrate/20120729025112_add_sessions_table.rb

> rake db:migrate

==  CreateLinkedinUsers: migrating ============================================
-- create_table(:linkedin_users)
  -> 0.0236s
==  CreateLinkedinUsers: migrated (0.0237s) ===================================

==  AddSessionsTable: migrating ===============================================
-- create_table(:sessions)
  -> 0.0012s
-- add_index(:sessions,:session_id)
  -> 0.0006s
-- add_index(:sessions,:updated_at)
  -> 0.0006s
==  AddSessionsTable: migrated (0.0026s) ======================================

>要找出实际创建的表,我打开sqlite3文件

sqlite> .schema sessions
CREATE TABLE "sessions" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"session_id"   varchar(255) NOT NULL,"data" text,"created_at" datetime NOT NULL,"updated_at" datetime NOT NULL);
CREATE INDEX "index_sessions_on_session_id" ON "sessions" ("session_id");
CREATE INDEX "index_sessions_on_updated_at" ON "sessions" ("updated_at");

因此,会话表中有一个“数据”字段,用于存储与会话相关的所有内容.

现在,我的问题:-)

我需要在会话中存储2个变量的值:access_token和request_token.
可以使用以下吗? (我用于存储cookie的会话值的方式)

session[:access_token] = <blah>
session[:request_token] = <some other blah?

如果它有效,那么ruby会将这两个变量存储在数据表的“data”字段中.

非常感谢您的帮助!

解决方法

所有会话变量都使用会话表的数据列中的Base64进行序列化.如果您使用cookie会话存储分配和检索值,则可以使用与使用它相同的方式.在数据库中存储会话变量有一些不错的好处,就像在每个请求期间只传输session_id,而不是从cookie的整个会话,通过检查他们的年龄(created_at / updated_at)来管理陈旧或旧会话的能力,以及能够存储比Cookie更多的信息.

您也可以提供自己的Session类,查看SessionStore类中的文档:https://github.com/rails/rails/blob/5edfc463484827df364a1e589677d5c84dfac282/activerecord/lib/active_record/session_store.rb

猜你在找的Ruby相关文章