13

私はグーグル大学を約1時間ほど調べましたが、このトピックに関する良いドキュメントは1つもありません:-(誰かが助けてくれることを願っています.誰かが私に教えてくれる限り、私は本を買うつもりです.

私は次のバージョンを使用しています:

  • レール3.2.6、
  • ruby 1.9.3p194 (2012-04-20 リビジョン 35410) [x86_64-darwin11.4.0]

Cookie の代わりに Active Record のセッション ストレージの使用を開始するために、次のことを行いました。

  1. 更新します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
    
  2. rake db:sessions:create

    invoke  active_record
      create    db/migrate/20120729025112_add_sessions_table.rb
    
  3. 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) ======================================
    
  4. 実際に作成されたテーブルを確認するために、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");
    

そのため、セッション テーブルには、セッションに関連するすべてを格納する「データ」フィールドがあります。

さて、私の質問に:-)

セッションに access_token と request_token の 2 つの変数の値を格納する必要があります。以下は使えますか?(Cookieのセッション値を保存するために使用した方法)

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

そして、それが機能する場合、Rubyは両方の変数をテーブルの「データ」フィールドに配列として保存しますか。

助けてくれてありがとう!

4

2 に答える 2

4

すべてのセッション変数は、セッション テーブルのデータ列で Base64 を使用してシリアル化されます。Cookie セッション ストアを使用して値を割り当てたり取得したりする場合と同じように使用できます。セッション変数を db に保存することには、Cookie からのセッション全体ではなく、各リクエスト中に session_id のみを送信する、古いセッションまたは古いセッションを年齢 (created_at/updated_at) をチェックして管理する機能など、いくつかの優れた利点があります。 Cookie に保存できるよりも多くの情報を保存する機能。

独自の Session クラスを提供することもできます。SessionStore クラスのドキュメントを確認してください。

于 2012-08-05T07:43:49.920 に答える
0

通常、Rails がセッションを保存する方法についてあまり気にする必要はありません。これは透過的です。Cookie ストアまたは ActiveRecord ストアを使用する場合、コードは変更されません。

そうですね、以前やっていたことができます。技術的には、セッションを含むシリアル化された文字列がdataフィールドに保存されますが、それほど重要ではありません:)

ただし、ActiveRecord を使用する正当な理由がない限り (セッションで 4K 以上のデータがある場合)、Cookie ストアを使用することをお勧めします。

于 2012-07-29T03:09:01.983 に答える