Railsでセッションを試してみる

RailsをMySQLに対応させてみるの続き
RailsのMySQLの環境にアクセスできるようにしておくも済ませておく)

Railsでセッションを試してみる。

Cookie

Railsのデフォルトである、Cookieでセッションを管理する方法を試してみる。

sampleコントローラを下記のように書き換える。

$ vi app/controllers/sample_controller.rb
class SampleController < ApplicationController
  def index
    if session[:key].blank? then
      session[:key] = 0
      render :text => 'セッション作成'
    else
      session[:key] += 1
      render :text => session[:key]
    end
  end
end

http://サーバーのIPアドレス/
にアクセスすると、
初回は「セッション作成」と表示され、その後は1,2,3,…と増えていく。

この時cookieには、「_sample_mysql_session」というキーで
下記のような値が格納されている。

MVlvbUoxN0s1TkgvTmI1VG5IcTdhc2V…aENBMnZaR3dDT3l6N216dUZBPT0%3D--225339a136a0a9…cb0cecdd6670810feecd7

cookieを削除すると、初回アクセス時は「セッション作成」と表示されるようになる。

DB

次は、データベースでセッションを管理する方法を試してみる。

【参考】
Rails3 to Rails4の変更点、気付いたことまとめ [俺の備忘録]
http://o.inchiki.jp/obbr/154

GemfileにセッションをDBで管理するgemを追加してインストールする。

$ vi Gemfile
gem 'activerecord-session_store'	←追加
$ bundle install

「:active_record_store」に変更する。

$ vi config/initializers/session_store.rb
SampleMysql::Application.config.session_store :active_record_store, key: '_sample_mysql_session'

マイグレーションファイルを作成してマイグレーションする。

$ rails generate active_record:session_migration
$ rake db:migrate

以上で、設定完了。

データベースには、sessionsテーブルが作成される。

mysql> show tables;
+------------------------------------+
| Tables_in_sample_mysql_development |
+------------------------------------+
| schema_migrations                  |
| sessions                           |
+------------------------------------+
mysql> show create table sessions;
+----------+-------------------------------------------------+
| Table    | Create Table                                    |
+----------+-------------------------------------------------+
| sessions | CREATE TABLE `sessions` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `session_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `data` text COLLATE utf8_unicode_ci,
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `index_sessions_on_session_id` (`session_id`),
  KEY `index_sessions_on_updated_at` (`updated_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
+----------+-------------------------------------------------+

Apacheを再起動して反映する。

$ sudo service httpd restart

http://サーバーのIPアドレス/
にアクセスすると、Cookieの場合と同様に
初回は「セッション作成」と表示され、その後は1,2,3,…と増えていく。

この時cookieには、「_sample_mysql_session」というキーで
下記のような値のセッションIDが格納され、

bfdf20548f4f8…a96c4ab8a7b3bf

データベースに対応する値が格納される。

mysql> select * from sessions;
+----+--------------------------------+---------------------------+---------------------+---------------------+
| id | session_id                     | data                      | created_at          | updated_at          |
+----+--------------------------------+---------------------------+---------------------+---------------------+
|  1 | bfdf20548f4f8…a96c4ab8a7b3b   | BAh7BkkiCGtleQY6BkVGaQ…  | 2014-03-22 04:00:17 | 2014-03-22 04:01:02 |
+----+--------------------------------+---------------------------+---------------------+---------------------+

作られたセッションのデータは下記のコマンドでクリアできるっぽい。

$ rake db:sessions:clear