セッション情報が上書きされる
created: 2009-03-02 18:33 | modified: 2009-03-04 00:52 | reply: 4
[4264] セッション情報が上書きされる - pyon - 2009-03-02 18:33- [4265] Re.セッション情報が上書きされる - ゆうじ - 2009-03-03 00:47
- [4266] Re.セッション情報が上書きされる - pyon - 2009-03-03 10:40
- [4267] Re.セッション情報が上書きされる - ゆうじ - 2009-03-03 19:47
- [4268] セッションの上書きを再現出来るパターン - ゆうじ - 2009-03-04 00:52
[4268] セッションの上書きを再現出来るパターン
user: ゆうじ | created: 2009-03-04 00:52
ひとつ思い出したことがあります。
例えば以下の sess3.php の中の prototype.js が存在しないと仮定します。
prototype.js が無ければあらかじめ設定してある404エラーページが返ります。
sess3.php
404エラーページが呼ばれるのは
sess3.php の処理が完全に終了した後なので、
この時の404エラーページがPHPスクリプトで、且つ
セッションを使っていた場合、再びセッションが復帰されます。
これ以降の処理でセッションの値を参照しようとしても
404エラーページのセッション処理で上書きされてる現象がおこります。
また、mod_rewrite を使ってこんな具合に
存在しないファイルのリクエストを全てindex.php に処理させてる場合、
.htaccess
リクエストが含まれてれば、index.php が何度も呼ばれ、
その度にセッションが上書きされます。
最近はこっちのほうがありがちですね。
リダイレクトともセッションハンドラとも結びつきませんが
サーバー引越しの時にこれにハマったのを思い出しました。
ミラーリングしてたつもりが完全には出来てなかったわけです。
「セッションが上書きされる」で思いあたるのはこのくらいです。
また「セッションが消える」で思いつくのは
register_globals = On ですが PHP5では考えにくいですね。
【参考】[4103] セッションが消えてしまいます。
http://www.sound-uz.jp/php/bbs/thread/4103?view=flat
クッキーの値やステータスコード404が返ってないかなど
一度クライアントからデバッグしてみるといいかもしれません。
私は Firebug の 接続(ネットワークモニター)を使って検証しました。
例えば以下の sess3.php の中の prototype.js が存在しないと仮定します。
prototype.js が無ければあらかじめ設定してある404エラーページが返ります。
sess3.php
<?php
session_start();
?>
<html>
<head>
<title>Session Test</title>
<script type="text/javascript" src="/js/prototype.js"></script>
</head>
<body>
<p>
<?php
if (isset($_SESSION['test']))
echo $_SESSION['test'];
else
echo 'Empty Session';
?>
</p>
</body>
</html>404エラーページが呼ばれるのは
sess3.php の処理が完全に終了した後なので、
この時の404エラーページがPHPスクリプトで、且つ
セッションを使っていた場合、再びセッションが復帰されます。
これ以降の処理でセッションの値を参照しようとしても
404エラーページのセッション処理で上書きされてる現象がおこります。
また、mod_rewrite を使ってこんな具合に
存在しないファイルのリクエストを全てindex.php に処理させてる場合、
.htaccess
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php$1 [L]index.php で出力したHTMLに、存在しない画像・CSS・Javascriptなどのリクエストが含まれてれば、index.php が何度も呼ばれ、
その度にセッションが上書きされます。
最近はこっちのほうがありがちですね。
リダイレクトともセッションハンドラとも結びつきませんが
サーバー引越しの時にこれにハマったのを思い出しました。
ミラーリングしてたつもりが完全には出来てなかったわけです。
「セッションが上書きされる」で思いあたるのはこのくらいです。
また「セッションが消える」で思いつくのは
register_globals = On ですが PHP5では考えにくいですね。
【参考】[4103] セッションが消えてしまいます。
http://www.sound-uz.jp/php/bbs/thread/4103?view=flat
クッキーの値やステータスコード404が返ってないかなど
一度クライアントからデバッグしてみるといいかもしれません。
私は Firebug の 接続(ネットワークモニター)を使って検証しました。
