ケータイサイトでの認証とかについて 「セッション」
セッション
ケータイサイトでの認証とかについて 「かんたんログイン」 - お前の予定!! 日記 では、NTTドコモの仕様に合わせてページ遷移を考えればよいと書いたのですが、すべてのリンクに"guid=ON"と書くのはイマイチ感があったりする。
ケータイ専用に作ってしまえばそれでイイのかもしれないけど、同じページをPCにも出したいなとか欲張るとセッションをつかってなんとかしたいなとか思います。
google:セッション管理の概要についてはグーグル先生におまかせするとして。ケータイ向けにセッションを使おうとするとCookieが使えないので、PC向けとは違った対策が必要になってくる。
- php.ini で session.use_trans_sid = 1
- Cookieを使わなくても自動的にセッションidをサイト内リンクに付加する。
- ただし、コレだけだとセッションidの漏洩につながる。
- セッションidをページ更新のたびにセッションidを再生成する
- セッションid漏洩対策なのだが、ブラウザの「戻る」「進む」が使えなくなる。
- iモードidに依存することでセッションを管理しないという手も再考すべきかも
- すべてのリンクに"guid=ON"を埋め込むようにする。
セッションidの再生成
リクエストごとにセッションidを作り直すための関数をつくる。session_regenerate_id()で新しいセッションidと置き換えられるのだが、一筋縄ではいかないらしいので以下のようなコードを用意する。
セッションidを再生成するたびに、セッション情報を書き込むファイルがサーバーに溜まっていきます。なので古いセッション情報ファイルも削除します。
- cf)
<?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; } ?>
考慮しないといけないこと
- セッションidが漏洩しちゃう
- セッションID付きURLが Bot にインデックスされる等で、セッションID漏えい問題に対応したい - 基本へ帰ろう
- 検索エンジンのクローラがセッションid付きのURLを登録しちゃう
- 他のサイトへのリンクでリファラ経由でURL(セッションid付き)が渡ってしまう
- 自分の見ているページのURL(セッションid付き)を他人にメールで教えちゃう
- ソーシャルブックマークとかに登録しちゃう
- セッションID付きURLが Bot にインデックスされる等で、セッションID漏えい問題に対応したい - 基本へ帰ろう
- キャリアごとにCookieの挙動がちがうよ
- SSL通信まで考慮するともう大変