2

これを検索するたびに、ブラウザのキャッシュを無効にする方法に関する情報が得られます。それを有効にすることについては決して何もしません。

ページを再生成せずにキャッシュを使用するように戻るボタンを取得するにはどうすればよいですか?

4

2 に答える 2

2

私の知る限り、これらのメタ タグを使用してブラウザに強制的にデータをリロードさせるように制御できます。

<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Expires" content="0">

ただし、強制的にキャッシュから読み取ることはできません。キャッシュを無視するように明示的に指定しない場合、ブラウザー自体がそれを行います。実際、ページ データはキャッシュされ、有効期限が切れていません。

これはクライアント側であるため CodeIgniter には依存しませんが、CI のhtml helperに含まれる meta() 関数を使用すると、対応するメタ タグが単純に出力されます。例えば:

echo meta('Cache-control', 'no-cache', 'http-equiv');

上記の 2 番目のコード行が生成されます。

ノート:

  1. 1 番目のメタ タグは http/1.0 用に指定され、2 番目のメタ タグは http/1.1 用に指定されていますが、両方とも後方互換性を確保するために使用されます。

  2. html の代わりに xhtml を使用している場合は、必ずメタ タグを次のように閉じてください。/>

于 2012-12-10T16:51:32.800 に答える
2

ブラウザのキャッシングは codeigniter とは何の関係もありません。html メタ タグを使用して、ページをキャッシュしないようにブラウザーに明確に指示するか、次のように個々のページにキャッシュの有効期限を設定できます。

<meta http-equiv="expires" content="Mon, 10 Dec 2001 00:00:00 GMT" />

少しの PHP を使用して、明日の日付をそこにドロップできます。ブラウザは (設定によって異なりますが) 通常、戻るボタンをクリックしたときを含め、キャッシュからできるだけ多くのデータを自動的に取得します。戻るボタンのキャッシュは、他のリンクからアクセスした場合と同じように機能します。

Apacheサーバーで次のようなものを使用してhtaccessを介して有効期限切れヘッダーを設定できます(他のサーバータイプでこれを行う方法について尋ねる必要があります)、ブラウザに特定のタイプのコンテンツを一定期間キャッシュする必要があることを伝えます時間:

ExpiresByType text/html "access plus 60 seconds"

これにより、ブラウザは、MIME タイプの text/html を 60 秒間保存するように指示されます (これには codeigniter 出力が含まれます)。しかし動的コンテンツを扱う場合はこれを行わないでください。戻ってきた訪問者によって読み込まれます (明らかに、この 2 番目の部分は 60 秒のキャッシュではそのような問題ではありません)。

重要なことは、あなたのページは 1 つのものではなく、多くのパーツで構成されているということです。これらのパーツの一部はキャッシュ (js、css、画像など) から呼び出す必要があり、そうでないものもあります (多くの場合、html はこのカテゴリ)。ブラウザーは、キャッシュの有効期限が切れていないキャッシュからページのすべての部分を自動的に呼び出します。

通常、.htaccess (または同様の方法) を使用して、css、画像などをキャッシュします (ファイル名にバージョン管理を使用して、変更時に強制的にリロードします)。

サーバー側のキャッシュも利用する必要があります-codeigniterはページ全体に対してこれを行いますが、これはあらゆる種類の動的サイトに非常に役立つとは思わないので、ciにphil sturgeonsの部分キャッシュライブラリを使用する方法を検討します. SSキャッシングに興味があります:

https://github.com/philsturgeon/codeigniter-cache

これにより、サーバーに送信されるリクエストが停止することはありませんが、リクエストの処理が少なくて済み、1 つまたは複数の静的コンテンツとして提供できることを意味します。

于 2012-12-10T16:52:34.620 に答える