HTMLおよびJSPページがキャッシュされ、Webサーバーから再取得されるのを防ぎます。

HTMLおよびJSPページがキャッシュされ、Webサーバーから再取得されるのを防ぎます。
ユーザーがログアウトした後、ブラウザの戻るボタンがクリックされると、Web アプリケーションは保護されたページを適切に保護できなくなります。セッションが破棄された後 (ユーザーがログアウトした後)、保護された JSP ページがブラウザに再度表示されます。
ただし、ユーザーが戻りページのリンクをクリックすると、Web アプリケーションはログイン ページにジャンプし、セッションが終了したことを通知します。ログインしてください。

上記の問題の根本は、ほとんどのブラウザに戻るボタンがあることです。

戻るボタンをクリックすると、デフォルトではブラウザは Web サーバーからページを再取得せず、ブラウザ キャッシュからページを読み込みます。

Java ベースの Web アプリケーションではこの機能は制限されず、この問題は PHP、ASP、.NET ベースの Web アプリケーションでも発生します。
幸いなことに、HTTP ヘッダー「Expires」と「Cache-Control」は、アプリケーション サーバーがブラウザーとプロキシ サーバー上のキャッシュを制御するためのメカニズムを提供します。

HTTP ヘッダー Expires は、キャッシュされたページの有効期限が切れる時期をプロキシ サーバーに通知します。
HTTP1.1 仕様で新しく定義されたヘッダー情報 Cache-Control は、ブラウザにページをキャッシュしないように通知できます。

戻るボタンをクリックすると、ブラウザはサーバーに再アクセスしてページを取得します。

Cache-Control を使用する基本的な方法は次のとおりです。
1) no-cache: キャッシュを強制的にサーバーから新しいページを取得する
2) no-store: いかなる状況でもページをキャッシュに保存しない

安全のためには、HTMLページとJSPの両方にいくつかの設定を追加するのが最善です。

HTML ページの場合は以下を追加します。

コードをコピー
コードは次のとおりです。

<meta HTTP-EQUIV="pragma" CONTENT="no-cache">
<meta HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<meta HTTP-EQUIV="有効期限" CONTENT="0">

JSP ページの場合は以下を追加します。

コードをコピー
コードは次のとおりです。

<%
response.setHeader("Cache-Control","no-store");
response.setHeader("プラグマ","キャッシュなし");
response.setDateHeader("有効期限",0);
%>

それでおしまい。

<<:  CSS3 で QR コードスキャン効果を実装する例

>>:  AWS無料サーバーアプリケーションとネットワークプロキシ設定チュートリアルの詳細な説明

推薦する

Nginxのアクセス制限設定の詳細な説明

Nginxのアクセス制限設定とはNginx のアクセス制限は、IP ベースのアクセス制御とユーザーベ...

MySQL の binlog ログと、binlog ログを使用してデータを回復する方法を説明します。

ご存知のとおり、binlog ログは MySQL データベースにとって非常に重要です。万が一、データ...

vue3+vite プロジェクトで svg を使用する方法の詳細なグラフィック説明

今日、vue3+viteプロジェクトの実践で、svgを使用する場合、以前の記述方法が使用できないこと...

IE6/7 における a.getAttribute(href,2) 問題の分析と解決

簡単な説明<br />IE6および7では、一般的なaタグ(HTMLで記述され、DOM操作...

MySQLトランザクションとSpring分離レベルの実装原理の詳細な説明

1. トランザクションはACID特性を持つ原子性: トランザクションは、トランザクションによって分割...

CentOS7 インストール Zabbix 4.0 チュートリアル (イラストとテキスト)

SeLinuxを無効にするsetenforce 0永久に閉店: vi /etc/selinux/c...

Vue プロジェクトで TS (TypeScript) を使用するための入門チュートリアル

目次1. Typescriptの紹介2. 設定ファイル webpack 設定3. プロジェクトに.t...

Vue はシェイク機能を実装します (ios13.3 以降と互換性があります)

最近、shake.jsを使用して、shakeに似た機能を作成しました。ただし、shake機能はios...

CentOS7にJDK8をrpmモードでインストールする

CentOS 7が正常にインストールされると、OpenJDKのJREがデフォルトでインストールされて...

Linux の vsftpd サービス構成の簡単な分析 (匿名、ユーザー、仮想ユーザー)

vsftpd の概要vsftpd は「very secure FTP daemon」の略称で、セキ...

Navicat がデータベース データ構造をインポートする際に発生するエラー datetime(0) の SQL レポートの問題を解決します。

エラー発生: MySQL 5.7 から SQL にデータベースをエクスポートし、それを MySQL ...

Web 標準アプリケーション: Tencent QQ ホームページの再設計

Tencent QQのホームページがリニューアルされ、Webフロントエンド開発がますます注目を集めて...

ROS2のインストールとdocker環境の使い方について

目次Docker を使用する理由は何ですか? DockerのインストールROSイメージを取得するRO...

border-image を使用してテキストバブルの境界線を実装する方法のサンプルコード

開発中に、非常に単純なテキストバブル効果に遭遇しました。これは、おおよそ次のようになります。 うーん...

DockerはClickHouseをインストールし、データテストを初期化します

クリックハウスの紹介ClickHouse は、SQL クエリを使用して分析データ レポートをリアルタ...