ホーム > ブログ > concrete5 > concrete5.7でセッションハンドラをデータベースに変更する

concrete5.7でセッションハンドラをデータベースに変更する

2016.07.16

こんちゃ、銀ねこです。

先日、クライアント様のご用意いただいたサーバの設定がガチガチでセッションが書き込めなくなっていたのでデータベースに書き込む方法に変更したので、そのやり方についてメモします。

そもそもセッションってなんぞ?

セッションとはサーバーとクライアントとの一連のやりとりのことです。 どのユーザーがアクセスしてきているのか、あるいはこれまでにどのような情報のやり取りが あったのかといったことを判断します。 このようなサーバーとクライアント間の情報を管理・保持することをセッション管理と言います。

http://www.standpower.com/php_session.html

セッションはどうやって管理される?

サーバーはリクエストがあったクライアントに対して、セッションIDというものを発行し、クライアント側に保存させます。 サーバーはセッションIDとクライアントとのやり取りの情報を保存します。 次回、クライアントがそのサーバーに接続した際に、セッションIDにより それまでにやり取りした情報や記録を保持したものを引き継ぐことができるのです。

ちなみにクッキーの違う点はクライアント側で情報を保存します。 

通常のセッションの保存場所

セッションを利用するためにはphp.iniに以下のような設定が必要になります。

  • session.use_trans_sid = on
  • session.save_path = 任意のディレクトリ

これでセッションをスタートさせれば通常セッションが任意のディレクトリ内に保存されるようになりますので、使えるようになるわけです。


が、


サーバのセキュリティがガチガチでセッションファイルを書き込むディレクトリーが見当たらないよーと途中からエラーを吐くようになりました。

本題:セッションの保存場所を変えてみよう!

ということで仕方ないので、セッションの保存場所をデータベース内に変更することに。

まずconcrete.phpを作成、application/config内に保存。

ここにこのファイルを作ることによって、concrete/config/concrete.phpをオーバーライドします。

すでに他の設定で作っている場合は、return array();の中に以下のようにコードを追記します。

  1. return array(
  2. 'session' => array(
  3. 'handler' => 'database',
  4. )
  5. );

これでセッションはデータベース内に保存されるようになりました。

めでたしめでたし。