fc2ブログ

2024.11 «  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 - - - - » 2025.01
TOP > CATEGORY > session

TOP

session セッションの情報を消す 

2007年06月25日 ()
rails を動かしていて、グワー、セッションに入っている情報を一旦クリアしないと、プログラムが動かないですよ、という状態になった場合には

# rake db:sessions:clear



と打ってあげると、サーバのセッション情報がオールクリアされます。(ファイル管理してようが、DB管理してようが。)

ちなみに、上のコマンドのセッションは、複数形のsessionsなのですが、このコマンドを私は最初に単数形のsessionで打っていたので、↓のように、エラーがでてハマりそうになりました。あぶないあぶないくわばらくわばら。

# rake db:session:clear
rake aborted!
Don't know how to build task 'db:session:clear'

(See full trace by running task with --trace)



【広告】

[2007.06.25(Mon) 01:04] sessionTrackback(0) | Comments(0) 見る▼
↑TOPへ

session セッションをDBで管理 

2007年06月23日 ()
セッションを使うと、ユーザが画面遷移してもユーザ特有の情報を失わないようにできます。

フツー、このセッション情報は、ユーザのクッキーの値と、サーバのセッション情報の値が同じものをつきあわせて、サーバのセッション情報を使います。

ではサーバにはどうやってセッション情報が保存されているかというと、デフォルトではファイルで保存されているそうです。

それをファイルではなくてDBに保存するには、例のレ・レ・レイク(by ジーコ)を使うらしいです。

早速やってみよう!

# rake db:sessions:create
(in /home/roruser/myApplication)
exists db/migrate
create db/migrate/001_add_sessions.rb



と、migrationファイルができました。

ちょっと中をのぞいでみましょう。

class AddSessions < ActiveRecord::Migration
  def self.up
    create_table :sessions do |t|
      t.column :session_id, :string
      t.column :data, :text
      t.column :updated_at, :datetime
    end

    add_index :sessions, :session_id
    add_index :sessions, :updated_at
  end

  def self.down
    drop_table :sessions
  end
end



sessions テーブルを作成するためのmigrationファイルのようです。

では、実際にmigrateしてしまいましょう

# rake db:migrate
(in /home/roruser/myApplication)
== AddSessions: migrating =====================================================
-- create_table(:sessions)
-> 0.3056s
-- add_index(:sessions, :session_id)
-> 0.2372s
-- add_index(:sessions, :updated_at)
-> 0.0926s
== AddSessions: migrated (0.6439s) ============================================



早いなあ。息をつく間もありませぬ。

どんなsessionsテーブルができたかというと、

$mysql explain sessions;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment | 
| session_id | varchar(255) | YES  | MUL | NULL    |                | 
| data       | text         | YES  |     | NULL    |                | 
| updated_at | datetime     | YES  | MUL | NULL    |                | 
+------------+--------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)



です。極めてフツーですね。特異な点は見当たらないです。

最後の仕上げに、config/environment.rb ファイルを変更します。


# Use the database for sessions instead of the file system
# (create the session table with 'rake db:sessions:create')
# config.action_controller.session_store = :active_record_store



という箇所がありまして、最後の行のコメントを50代の部長代理が家に帰って一息ついたときのカツラのように、気軽に取り外します。


# Use the database for sessions instead of the file system
# (create the session table with 'rake db:sessions:create')
config.action_controller.session_store = :active_record_store



後は、Webサーバを再起動すれば、セッション変数を使ったとき(たとえば、 session[:honyarara] のように)は、DBにセッション情報が保存されるようになります。

めでたしめでたし。

【広告】

[2007.06.23(Sat) 01:03] sessionTrackback(0) | Comments(0) 見る▼
↑TOPへ

TOP