0

まず、タイトルについて申し訳ありません。より良いものを見つけることができませんでした。

PHPスクリプトによって生成された画像ファイルがあります。このスクリプト(画像)はデータベースに接続され、そのリファラーURLをテーブルに保存します。出力画像は変わらないので、キャッシュしたほうがいいと思います。

しかし、私が知っているように、1つのファイル(たとえばhttp://www.example.com/img.png.php)をキャッシュすると、すべてのページで、ブラウザーはそれをキャッシュから読み取ります。そしてそれは私のスクリプトには良くありません。最初の呼び出しで、リファラーのURLが保存され、ブラウザーによってキャッシュされるためです。そして、次の呼び出しでは、さまざまなWebサイト(リファラー)で、キャッシュされたバージョンが使用され、ブラウザーはサーバーに要求を送信せず、最後にリファラーのURLはデータベースに保存されません。

ブラウザに言ってもいいですか、ドメインごとに画像のコピーを1つキャッシュしてください。つまり:

http://wwww.abc.com/index.html私の画像(スクリプト)を取得するためのリクエストを送信します

ブラウザはキャッシュをチェックしますが、見つかりません。したがって、サーバーから取得します。PHPスクリプトはリファラーのURLを保存します。

ユーザーはABC.COMの別のページに移動します。(例http://wwww.abc.com/about.html:)ブラウザはキャッシュをチェックし、それを見つけます。したがって、ファイルの内容を取得するための要求をサーバーに送信しません。PHPスクリプトは実行されません。

別のサイト(http://wwww.efg.com/index.html)が私の画像(スクリプト)ブラウザがキャッシュをチェックするように要求を送信しましたが、それが見つかりません。そのため、ファイルコンテンツのリクエストを送信します。そしてPHPスクリプトが実行されます..............................。

出来ますか?(長いテキストで申し訳ありませんが、文法上の問題がたくさんあります)

4

3 に答える 3

1

リファラーをデータベースに保存してから、キャッシュされた画像にリダイレクトするリダイレクトページ(キャッシュされていない)を使用できます。

そうすれば、常にヒットしますが、実際の画像はキャッシュされます。


HTMLでは、次のものを使用できます。

<img src="/image.php">

そしてでimage.php

<?php
    // save the referrer in here

    header('Location: /image.jpg');
?>

そして/image.jpgあなたの実際の画像です(キャッシュすることができます)

于 2012-04-11T20:39:40.630 に答える
1

まず、ユーザーエクスペリエンスについて考えてみましょう。リファラー機能のためだけに、ページの読み込み時間を本当に増やす必要がありますか?Refererまた、多くのブラウザ/プライバシーツールの構成では、そもそもヘッダーが抑制されるか、送信されないことに注意する必要があります。

リソース(JavaScript、スタイルシート、画像など)を毎回ロードすることが本当に確実な場合は、キャッシュを防ぐためにリソースとともにCache-ControlHTTPヘッダーを送信できます。たとえば、referer.jsApacheで提供されたときにキャッシュされないように.htaccessするには、同じディレクトリに次のファイルを追加します(必須mod_header)。

<FilesMatch "^referer\.js$">
Header set Cache-Control no-cache
</FilesMatch>
于 2012-04-11T20:47:23.940 に答える
0

カウンターのようですよね?

AFAIKあなたはあなたが説明したことを正確に行うことはできません。

ただし、サーバー側でいつでも画像を「キャッシュ」できるため、画像を再描画する必要はありません。

<?
/*
  do some stuff
*/
// send an image: the content-type first
header('Content-type: image/png');
// and the image
readfile('myImage.png');
于 2012-04-11T20:36:26.957 に答える