codeigniterはセッション情報をクッキー保持するので、複数台構成でもセッション保持してくれる
公開日:
:
CodeIgniter, PHP, 複数台構成
サービスが拡大していくと、いずれサーバの複数台構成にしなければならなくなる状況になります。
その時にあーだ、こーだ、と設計を見直ししなればならなくなり面倒な開発を行う必要があります。特にサーバが切り替わるとログアウトしてしまいログイン状態を維持できない状況に陥ります。
codeigniterというフレームワークは、Webサーバ複数台構成を見据えて、ログアウトせずにセッション維持するための仕組みが用意されています。
まず、codeigniterはセッション管理に独自な仕組みを持っています。
codeingierのセッション管理
codeigniterでセッションに保持したい場合は、以下のようにセットを行ないます。
$this->load->library('session'); $this->session->set_userdata('company_name', 'アルベ');
上記関数名から、一見、セッションに保持しているんだーと思ってしまいますが、実は違います。
codeingierのセッションクラス(CI_Session)にset_userdata関数の処理が書かれています。
function set_userdata($newdata = array(), $newval = '') { … $this->sess_write(); }
上記よりsess_write関数を呼び出しているので、その関数を同クラス内で探すと以下の処理が書かれています。
function sess_write() { … $this->_set_cookie($cookie_userdata); }
上記より_set_cookie関数を呼び出しているので、その関数を同クラス内で探すと以下の処理が書かれています。
function _set_cookie($cookie_data = NULL) { … setcookie( $this->sess_cookie_name, $cookie_data, $expire, $this->cookie_path, $this->cookie_domain, $this->cookie_secure ); }
上記より、setcookieというphpで用意されている関数を読んでいることが分かります。
phpの$_SESSIONでセットされておらず、codeigniterのセッション管理はクッキーに保持していることがわかります。
cookieに保持していること、つまりサーバ上のメモリ内にセッションがなく、クライアントマシン(=ブラウザのクッキー管理内)にあるので、Webサーバが切り替わってもセッションが破棄されることはありません。なので複数台構成でもセッションが維持されているのです。
ただ、デメリットとして、クッキーはデータ容量として4KB制限があるのでそれ以上を保管することはできないのですが、セッションとはそもそも必要最小限のデータを管理し、パスワードや不要なデータは入れないで実装するのが綺麗な書き方です。セッションに入れると実装が楽だからという理由でセッションを多用するのはよくありません。
なので逆に制限があったほうがセッションをむやみに利用しなくなるので逆にメリットだと思います。
お問い合わせはこちら!
関連記事
-
-
PHPカンファレンス2015参加後記(PHP7は何が変わったか?)
PHPカンファレンス2015に行ってきましたので、後記を作成してみました。発表内容についての説明より
-
-
codeigniterで複数データベース切替方法について
codeigniterでデータベース切替を行うためにはどうしたらよいかを試行錯誤してみました
-
-
codeigniterで共通のヘッダーフッターの読み出しはCI_LoaderをextendsしたMY_Loaderで実装する
codeigniterで共通のヘッダー、フッターを読み込むときは、CI_Loaderクラスを
-
-
PHP初心者はまず関数die()と、print_r()を覚えよう!
photo credit: drewm via photopin cc PHPを触り始めて
-
-
PHPでMicrosoft Translate APIの翻訳機能を使ってみる
photo credit: Robert Scoble via photopin cc レ
-
-
codeigniterで、PC版とスマフォ版のテンプレートを自動で振分ける方法
スマフォ版とPC版のテンプレートを切り替えるために、毎回コントローラでユ
-
-
Laravel 5.X Queryログ出力例
Laravel 5.1でQueryログを出力する際のメモです。 <?ph
-
-
PHP初心者は特に必見!CodeIgniter勉強するなら参考になるサイトまとめ
今でもメインで使っているし、使っていて気持ちのよいPHPフレームワークはCodeIgnite
-
-
codeigniterでIE8において別Windowで開くとセッションが切れてログアウトしてしまう
codeigniterで作成したWebサービスをアクセスしているときに、別Windowで開く
-
-
phpでexif_read_dataを使ってexif情報から撮影日を取得する
写真には画像データ以外に撮影日が取得できます!それがexifデータで、phpではexif_r