【php&ethnaで携帯サイトを作る】セッション管理(その3)

世の中はすっかり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です。

 

 

過去のシリーズ記事

 



« 「2008年の最新技術を見逃すな!」エンジニア交流勉強会gungi(グンギ) | メイン | 本が出ました。「プロセス・オブ・モバイル・サクセス 企画・発案から制作・運営・SEMまで携帯サイトを成功に導く55のポイント」 »

トラックバック

このエントリーのトラックバックURL:

コメントを投稿

about

平島浩一郎
株式会社マイネット・ジャパン



katy(ケイティ) - 携帯サイト作成無料CMS
newsing(ニューシング)
終電jp
まとめてブログ検索
あわせて読みたい

Powered by Movable Type
株式会社マイネット・ジャパン