セッション管理 例2

ご注意

今となっては,ほぼどんなブラウザでもクッキーを使うことができますし,逆にクッキーを使うほうが安全です。このページに書いたことは使わないほうがいいでしょう。php.ini

session.use_only_cookies = On

と書いておけば,必ずクッキーだけを使うようになります。

解説と例

クッキーが使えない場合も含めてセッション管理が楽にできるように,SID というものが用意されています。これは,クッキーが使えるときは空ですが,クッキーが使えないときは,セッション名とセッションIDを = でつないだ

PHPSESSID=b1ba7mgdedq3rddbadsav5k0r3

のような文字列になります。

これを使って,クッキーが使えないときでもセッション管理ができるようにした例です。

メッセージ:

過去のメッセージ:



ソース

<?php
  session_set_cookie_params(0, '/~okumura/');
  session_start();
?>

……

<form action="ses2.php?<?php echo htmlspecialchars(SID); ?>" method="post">
<p>メッセージ: <input name="msg"></p>
</form>

<?php
  if (!isset($_SESSION['msgs'])) {
    $_SESSION['msgs'] = '';
  }
  if (isset($_POST['msg'])) {
    $_SESSION['msgs'] .= $_POST['msg'] . "\n";
  }
  if (isset($_SESSION['msgs'])) {
    echo "<p>過去のメッセージ</p>:\n";
    echo "<pre>\n";
    echo htmlspecialchars($_SESSION['msgs']);
    echo "</pre>\n";
  }
?>

このように,PHPで出力するものはすべて htmlspecialchars() を通してから出力しないいとクロスサイトスクリプティングが起こり得ます。


Last modified: