0

ユーザー認証を必要とするasp.net webappがあり、認証は60分でタイムアウトするように設定されています。webapp のページの 1 つは、安全なサイトにある情報へのリンクを含む kml をロードする Google マップ ページです。セッションが期限切れになり、まだ Google マップ ページにあるブラウザに戻る可能性があるモバイル ユーザーの問題を解決しようとしています。マップは引き続き機能しますが、安全なサイトの情報へのリンクはすべてリダイレクトされます。 login.aspx に。私が実装しようとしている解決策は、設定された間隔でバックグラウンドで非常に小さな画像ファイルをロードし、onerror イベントが発生したときにリダイレクトを実行することです。私のテストコードは次のとおりです。

<script type="text/javascript">
    var interval;
    interval = setInterval('chkAuth()', 10000);

    function chkAuth() {
        var testImg = new Image();
        testImg.onerror = function () {
            alert("Your session has expired!");
        }
        testImg.onload = function () {
            alert("Your session has extended!");
        }
        testImg.src = "image url"
    }
</script>

コードをテストすると、セッションの有効期限が切れていても onload イベントが発生します。これは、別のウィンドウでイメージを読み込もうとすることで確認できます。その結果、login.aspx にリダイレクトされます。画像ソースとして間違った URL を入力して onerror イベントをテストしようとしましたが、その場合はトリガーされます。私の考えでは、このソリューションには、少なくともブラウザーがアクティブな間は asp.net セッションを拡張する効果もあります。

画像の URL が login.aspx へのリダイレクトになる場合に、onerror イベントが発生しないのはなぜですか?

4

1 に答える 1

0

次のように解決しました:

function chkAuth() {
        var date = new Date();
        var currentTime = date.getTime();
        var imgURL = 'small.png' + '?time=' + currentTime;
        var testImg = new Image();
        testImg.onerror = function () {
            alert("Your session has expired!");
            location.reload();
        }
        testImg.onload = function () {
            alert("Your session has extended!");
        }
        testImg.src = imgURL;
    }

問題は、画像オブジェクトがブラウザのキャッシュに保存されていたことです。現在の時刻を URL 文字列に追加することで、ブラウザーに強制的に画像をリロードさせます。画像オブジェクトをドキュメントにバインドせずにバックグラウンドでロードするだけだったので、画像がキャッシュされるとは思いもしませんでした。

于 2013-06-26T15:42:56.357 に答える