今となっては,ほぼどんなブラウザでもクッキーを使うことができますし,逆にクッキーを使うほうが安全です。このページに書いたことは使わないほうがいいでしょう。php.ini に
session.use_only_cookies = On
と書いておけば,必ずクッキーだけを使うようになります。
クッキーが使えない場合も含めてセッション管理が楽にできるように,SID というものが用意されています。これは,クッキーが使えるときは空ですが,クッキーが使えないときは,セッション名とセッションIDを = でつないだ
PHPSESSID=mbn7j9ts77fjfad7b1904fgk3c
のような文字列になります。
これを使って,クッキーが使えないときでもセッション管理ができるようにした例です。
過去のメッセージ:
<?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: