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