特定のASP.NETセッションがタイムアウトするまでの残り時間を調べようとしています。
すぐに利用できるtime-to-timeout値がない場合は、最後のアクセス時間から計算することもできます(ただし、これも見つかりませんでした)。これを行う方法はありますか?
特定のASP.NETセッションがタイムアウトするまでの残り時間を調べようとしています。
すぐに利用できるtime-to-timeout値がない場合は、最後のアクセス時間から計算することもできます(ただし、これも見つかりませんでした)。これを行う方法はありますか?
サーバーにいてリクエストを処理している場合は、タイムアウトがリセットされたばかりなので、20分全体(または構成したもの)が残ります。
クライアント側の警告が必要な場合は、「今」から約20分で起動するJavaScriptコードを作成する必要があります。setTimeoutメソッドを参照してください。
ページがリクエストされてから15分後に、これを使用して警告を表示しました。「セッションは{HH:mm}に期限切れになります。作業内容を保存してください」などのアラートがポップアップ表示されます。ユーザーがそのメッセージをいつ表示するかわからないため、「5分以内」ではなく、正確な時刻が使用されました(アラートが発生してから10分後にコンピューターに戻りましたか?)。
複数ページのソリューションの場合、Cookieの最終リクエスト時間を節約でき、JavaScriptは、警告メッセージまたはログインアウトアクションを処理するためにこの最終アクセス時間を考慮することができます。
私はここで尋ねられたような解決策を実装したばかりで、それはうまくいくようです。私はMVC
アプリケーションを持っていて、このコードを_Layout.chtmlページに持っていますが、それasp.net
をマスターページに配置することでアプリで機能する可能性があります。amplify.js
プラグインを介してローカルセッションストレージを使用しています。Grieves氏が言うように、ユーザーがページの更新やリダイレクトを引き起こさない方法でアプリケーションにアクセスしているにもかかわらず、サーバーのセッションタイムアウトをリセットする状況が発生する可能性があるため、ローカルセッションストレージを使用します。
$(document).ready(function () {
var sessionTimeout = '@(Session.Timeout)'; //from server at startup
amplify.store.sessionStorage("sessionTimeout", sessionTimeout);
amplify.store.sessionStorage("timeLeft", sessionTimeout);
setInterval(checkSession, 60000); // run checkSession this every 1 minute
function checkSession() {
var timeLeft = amplify.store.sessionStorage("timeLeft");
timeLeft--; // decrement by 1 minute
amplify.store.sessionStorage("timeLeft", timeLeft);
if (timeLeft <= 10) {
alert("You have " + timeLeft + " minutes before session timeout. ");
}
}
});
次に、ユーザーがページを更新することはないが、サーバーにアクセスしてセッションをリセットするページでは、これをボタンクリックイベントに配置します。
$('#MyButton').click(function (e) {
//Some Code that causes session reset but not page refresh here
amplify.store.sessionStorage("sessionTimeout", 60); //default session timeout
amplify.store.sessionStorage("timeLeft", 60);
});
ローカルセッションストレージを使用すると、ページが更新またはリダイレクトされなかった場合でも、_Layout.chtmlコードでセッションがここでリセットされたことを確認できます。
タイムアウトは、次の場所から数分で取得できます。
Session.Timeout
タイムアウトはリクエストごとにリセットされるため、これで情報を提供するのに十分ではありませんか?リクエストせずにこれをどのように表示したいかわからないのですか?
とにかく、最善の方法は、すべてのリクエストで、最終アクセス時刻でセッション変数を設定することです。それはリモートの情報を提供するはずです。