sessionIDの受渡し

携帯サイトは大変

セッションIDの受渡しは、クッキー利用が標準です。 ただし携帯サイトは、クッキー未対応携帯電話も考慮して、クッキー以外の方法を採用することも考える必要があります。

cookie利用

セッションIDの受渡しには、cookieを利用するのが標準的でしょう。 セッションを開始すると、$_COOKIE['PHPSESSID']にセッションIDが保存されます。

session_id()の引数に設定することで、以前開始したセッションを継続することができます。

  <?php
  session_id($_COOKIE['PHPSESSID']);
  session_start();
  ?>
  

必ずsession_id()でIDを設定してから、session_start()を呼び出すようにしてください。

cookie以外の利用

クッキーは、ブラウザやセキュリティソフトの設定で無効にすることができます。 またクッキーを利用できない環境もあります。 例えば携帯サイトの場合、クッキー未対応ケータイがあることも考慮すると、クッキー以外の方法でセッションID受渡しする必要があるでしょう。

そのような場合には、以下のような代替手段を用いることを考えてみましょう。

フォームにhiddenで埋め込む

入力フォームのパラメータとしてセッションIDを受渡しする方法です。 セッションIDは、エンドユーザーに見せる必要が無いので、属性はhiddenにしておきましょう。(ただしソースを見ればセッションIDが分かってしまいます。また悪意あるユーザーなら改変できます。)

URLパラメータに埋め込む

リンクURLの後ろにパラメータとしてセッションIDを付与する方法です。 実装は非常に簡単で、ユーザー環境に依存しないでセッション管理することができます。ただしリファラー等からセッションIDが第三者に洩れる可能性があり、セッションハイジャックのリスクが高くなります。

php.iniを編集できる場合は、以下のように設定すればOKです。 この設定では、COOKIEが利用できない場合に、同一ドメインへのリンク(相対リンク)に自動的にセッションIDを付与します。

session.use_trans_sid = 1

PHPスクリプト内で設定する場合は、以下のようにします。 セッション開始session_start()より前に記述してください。

ini_set('session.use_trans_sid', '1');

※繰り返しますが、この方法は不正アクセスのリスクが高いです。 詳細はPHPサイバーテロの技法(GIJOE著)が詳しいです。PCサイトならばクッキー利用を前提とすることをお薦めします。 ケータイサイト等で、この方式を採用せざるを得ない場合は、携帯端末IDやIPアドレスによるアクセス制限を行うようにしましょう。

Copyright (C) 2003-2013. PHP で WEB 作成 All rights reserved.