*

codeigniterはセッション情報をクッキー保持するので、複数台構成でもセッション保持してくれる

公開日: : CodeIgniter, PHP, 複数台構成

large__2433102356

サービスが拡大していくと、いずれサーバの複数台構成にしなければならなくなる状況になります。

その時にあーだ、こーだ、と設計を見直ししなればならなくなり面倒な開発を行う必要があります。特にサーバが切り替わるとログアウトしてしまいログイン状態を維持できない状況に陥ります。

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でMicrosoft Translate APIの翻訳機能を使ってみる

photo credit: Robert Scoble via photopin cc レ

記事を読む

phpでexif_read_dataを使ってexif情報から撮影日を取得する

写真には画像データ以外に撮影日が取得できます!それがexifデータで、phpではexif_r

記事を読む

PHP初心者は特に必見!CodeIgniter勉強するなら参考になるサイトまとめ

今でもメインで使っているし、使っていて気持ちのよいPHPフレームワークはCodeIgnite

記事を読む

codeigniterで複数データベース切替方法について

codeigniterでデータベース切替を行うためにはどうしたらよいかを試行錯誤してみました

記事を読む

codeigniterでIE8において別Windowで開くとセッションが切れてログアウトしてしまう

codeigniterで作成したWebサービスをアクセスしているときに、別Windowで開く

記事を読む

Laravel 5.1でLaravel Mixを使ってみた

本投稿の目的は、Laravel 5.1でLaravel Mixを利用してSassをCSSへコンパイル

記事を読む

第104回 PHP勉強会に参加しました!

昨日「第104回 PHP勉強会@東京」に参加し、メイン発表をしました。 本当は発表を聞きに行く

記事を読む

PHPカンファレンス2015参加後記(PHP7は何が変わったか?)

PHPカンファレンス2015に行ってきましたので、後記を作成してみました。発表内容についての説明より

記事を読む

PHP初心者の私がCodeIgniterを勉強して感じた4つのメリット、2つのデメリット

photo credit: Tc Morgan via photopin cc PHPを本

記事を読む

codeigniterで共通のヘッダーフッターの読み出しはCI_LoaderをextendsしたMY_Loaderで実装する

codeigniterで共通のヘッダー、フッターを読み込むときは、CI_Loaderクラスを

記事を読む

お問い合わせはこちら!

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

お問い合わせはこちら!

Laravel 5.1でLaravel Mixを使ってみた

本投稿の目的は、Laravel 5.1でLaravel Mixを利用し

Laravel 5.1の自動ログインのお試し!

セッションの保持時間を1分にする 単位:分 デフォルト

SourceTreeで差分ファイルを抽出

GitのクライアントでSourceTreeを利用する時、コミットの差分

第104回 PHP勉強会に参加しました!

昨日「第104回 PHP勉強会@東京」に参加し、メイン発表をしました。

Windows10にLaravel開発環境を構築

本記事は筆者のノートパソコンにLaravelプロジェクトの開発環境を構

→もっと見る

  • AWS構築 - クラウドアドバイザー
PAGE TOP ↑