ケータイサイトでの認証とかについて 「セッション」

セッション

ケータイサイトでの認証とかについて 「かんたんログイン」 - お前の予定!! 日記 では、NTTドコモの仕様に合わせてページ遷移を考えればよいと書いたのですが、すべてのリンクに"guid=ON"と書くのはイマイチ感があったりする。
ケータイ専用に作ってしまえばそれでイイのかもしれないけど、同じページをPCにも出したいなとか欲張るとセッションをつかってなんとかしたいなとか思います。

google:セッション管理の概要についてはグーグル先生におまかせするとして。ケータイ向けにセッションを使おうとするとCookieが使えないので、PC向けとは違った対策が必要になってくる。

  1. php.ini で session.use_trans_sid = 1
    • Cookieを使わなくても自動的にセッションidをサイト内リンクに付加する。
    • ただし、コレだけだとセッションidの漏洩につながる。
  2. セッションidをページ更新のたびにセッションidを再生成する
    • セッションid漏洩対策なのだが、ブラウザの「戻る」「進む」が使えなくなる。
  3. iモードidに依存することでセッションを管理しないという手も再考すべきかも
    • すべてのリンクに"guid=ON"を埋め込むようにする。
セッションidの再生成

リクエストごとにセッションidを作り直すための関数をつくる。session_regenerate_id()で新しいセッションidと置き換えられるのだが、一筋縄ではいかないらしいので以下のようなコードを用意する。
セッションidを再生成するたびに、セッション情報を書き込むファイルがサーバーに溜まっていきます。なので古いセッション情報ファイルも削除します。

<?php
    function sessionRegenerate() {
        $tmp = $_SESSION;
        $old_id = session_id();
        session_destroy();
        session_start();
        session_regenerate_id(true);
        $old_session_file = session_save_path()."/sess_".$old_id;
        if ( file_exists($old_session_file) ) unlink($old_session_file);
        $_SESSION = $tmp;
    }
?>
考慮しないといけないこと
  1. セッションidが漏洩しちゃう
  2. キャリアごとにCookieの挙動がちがうよ
  3. SSL通信まで考慮するともう大変