スレッド表示 | フラット表示〕 全トピック 920 件中 31 番目 次≫ ≪前

セッション情報が上書きされる

created: 2009-03-02 18:33 | modified: 2009-03-04 00:52 | reply: 4

[4268] セッションの上書きを再現出来るパターン

user: ゆうじ | created: 2009-03-04 00:52
ひとつ思い出したことがあります。

例えば以下の 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 の 接続(ネットワークモニター)を使って検証しました。
Parent: 4266  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 31 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑