世の中はすっかりEthnaよりもCakePHPだよなー、なんて思いつつ。マイペースにこのシリーズ続けます。携帯サイト向けのセッション管理のお話。
ちょうど今月よりドコモでもimodeIDが取得できるようになったので、こういうセッション管理は今後必要なくなるかもしれないですが・・・。
今回はethnaに依存した話です。
session.use_cookies の変更タイミング
前々回で、php.ini設定項目の session.use_cookies を変更するとかって話をしましたが、今回はそれをどうethnaプロジェクトに実装するか、という話。
session.use_cookies の値を動的に変更するには、session_start() をするまえに変更しないと意味がないようです。これを実装する1つの方法として、Ethna_Sessionクラスを継承したクラスを作って、そのコンストラクタに記述する手があります。親クラスのコンストラクタを呼んだ直後に記述するとうまくいきました。
あ、Ethna_Sessionクラスを上書きする場合名、appディレクトリ直下の Controller.php でその名前を指定するのを忘れずに。
セッションパラメタ名の変更タイミング
続いてセッションパラメタ名を変更する場合の記述箇所について。「PHPSESSID=xxxx」ってやつを任意のものに変更する場合ですね。
これも上記と同じく、session_start() をする前、Ethna_Session 継承クラスのコンストラクタに記述するのがよいようです。
そんなわけで上記2つをあわせて、サンプルとしてはこんなものになります。
class Session_Extends extends Ethna_Session_Memcache
{
function Session_Extends($appid, $save_dir, $logger)
{
//■親クラスのコンストラクタをコール
parent::Ethna_Session($appid, $save_dir, $logger);
//■セッション名を上書き
$sessname = 'PHPSESSID'; //任意のものに変更
$this->session_name = $sessname;
session_name($this->session_name);
//■クッキーが使えない端末からのアクセスのときは、urlパラメタでセッション引数を引き回すようにする
if(Mobile::isEnableCookie() == false)
{
ini_set('session.use_cookies', 0);
}
}
}
Ethna_sessionのおせっかい機能
セッション使用時は、毎回アクセスもとのIPアドレスをチェックして、前回とちがうIPからアクセスされてきたときは別セッションとみなしてセッションを再スタートさせる処理、が、Ethna_Sessionに実装されています。PCアクセスの場合は頼りになる処理なんですが、携帯アクセスのときはコレが余計なお世話。携帯電話の場合、アクセスするたびにIPアドレスは変わりうるので、このままではセッションが継続されません。 ので、この実装を打ち消す対応が必要です。 具体的には、Ethna_session のなかの _validateRemoteAddr() が、このIPアドレスのチェックを行っています。このメソッドを、常にtrueを返すようにオーバーライドすればOKです。
過去のシリーズ記事
- 【php&ethnaで携帯サイトを作る】序章
- 【php&ethnaで携帯サイトを作る】ケータイサイト開発のおさらい
- 【php&ethnaで携帯サイトを作る】文字コード変換処理
- 【php&ethnaで携帯サイトを作る】セッション管理(前編)
- 【php&ethnaで携帯サイトを作る】セッション管理(その2)





