我在谷歌大学搜索了大约一个小时左右,但没有关于这个主题的单一好的文档:-(希望有人能提供帮助。我愿意买一本书,只要有人能告诉我哪一本书。
我正在使用以下版本:
- 导轨 3.2.6,
- ruby 1.9.3p194(2012-04-20 修订版 35410)[x86_64-darwin11.4.0]
要开始在 Active Record 中使用会话存储而不是 cookie,我执行了以下操作:
-
Update 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 是否将这两个变量作为数组存储在表的“数据”字段中。
非常感谢您的帮助!
所有会话变量均在会话表的数据列中使用 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 https://github.com/rails/rails/blob/5edfc463484827df364a1e589677d5c84dfac282/activerecord/lib/active_record/session_store.rb
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)