gpt4 book ai didi

ruby-on-rails - rails 3 : Storing Session in Active Record (not cookie)

转载 作者:行者123 更新时间:2023-12-03 23:56:56 25 4
gpt4 key购买 nike

我在谷歌大学搜索了大约一个小时左右,但没有关于这个主题的单一好的文档:-(希望有人能提供帮助。我愿意买一本书,只要有人能告诉我是哪一本书。

我正在使用以下版本:

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

  • 要开始在 Active Record 中使用 session 存储而不是 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");

  • 因此, session 表中有一个“数据”字段,它将存储与 session 相关的所有内容。

    现在,我的问题:-)

    我需要在 session 中存储 2 个变量的值:access_token 和 request_token。
    我可以使用以下吗? (我用来存储 cookie session 值的方式)
    session[:access_token] = <blah>
    session[:request_token] = <some other blah?

    如果它确实有效,ruby 是否将这两个变量作为数组存储在表的“数据”字段中。

    非常感谢您的帮助!

    最佳答案

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

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

    关于ruby-on-rails - rails 3 : Storing Session in Active Record (not cookie),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11706297/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com