2010-12-20 10 views
1

Webページが1つあります(A.htmlと呼ぶことができます)。 A.htmlには、単純なdocument.location = "B.php"を使用してページを動的なPHPページ(それをB.phpと呼ぶ)に切り替えるJavaScriptがいくつかあります。 B.phpは、表示されるクッキーに基づいてmysqlクエリを実行し、mysqli-> affected_rows変数に基づいて結果を返します。しかし、mysqli-> affected_rowsのページスイッチが0になるたびに、mysqlテーブルは想定通りに変更されます。面白いことに、URLバー(またはページを更新する)を使ってB.phpにまっすぐ行くと、mysqli-> affected_rowsは1になります。mysqli-> affected_rowsによるキャッシュ制御の乱れ

wiresharkを見ると、2つのGETリクエストの唯一の違いは、Cache-Control:max-age = 0という行が2番目の(javascript以外の)ものであることです。なぜこれが何かに影響を与えることを誰もが知っていますか?これを修正できる方法があるかどうか?

編集:HERESにコード

$req = $mysqli->prepare('update users set sts=NOW() where i=? and sid=? and sip=? and NOW()-sts <= '.$authentication_timeout.';'); 
    if ($mysqli->error) { 
     log_mysql_error($mysqli); 
     die('Unexpected error:'.$mysqli->error); 
    } 
    $req->bind_param('sss',$uid,$sid,$_SERVER['REMOTE_ADDR']); 
    $req->execute(); 

    print $mysqli->affected_rows; 
    $req->close(); 

答えて

0

キャッシュにはまったく問題はありませんでした。この問題が発生するのは、この特定のケースでは、このコードが実行される直前に同じ行が更新されており、NOW()が異なるために十分な時間遅延がないためです。したがって、行が一致している間は、データに変更はないので、$ mysqli-> affected_rowsはまだ0に等しくなります。 $ mysqli-> infoは "一致した行:1、変更された行:0"を示します。

0

あなたはので、私は唯一の推測することができます任意のコードを示していないが、affected_rows()は、テーブルには何も変更されません更新時にNULLを返します。おそらく、あなたのページをリロードすると、ページ上でアップデートが実行されたとしても、2番目のロードは0と表示されます。

2

それは確かにあなたの醸造を気まずいキャッシュだ場合、私は

document.location="B.php?nocache=" + new Date().getTime(); 

をやっても問題が解決されますね。それが確認できますか?

+0

あなたの解決策を試したが、うまくいかなかった。以前と同じ結果、javascriptがページを変更しても行が変更されていないと主張している(たとえそれがあったとしても)。 –

関連する問題