8

プロジェクトの1つに自動ログアウト機能を実装する必要があり、どこからアイデアを探し始めればよいかわかりませんが、SO .

ユーザーセッションの有効期限が切れた場合、アプリケーションがユーザーをログインページにリダイレクトする必要があります。この要件に取り組むための私のアプローチはどうあるべきか教えてください。

問題の説明: ユーザーが特定のログイン インスタンスで n 分以上システムを離れた場合、システムは自動的にユーザーをログオフする必要があります。

4

3 に答える 3

17

質問と同じくらいコメントを続けていますが、アクティビティに関係なく一定時間後にユーザーをログアウトさせるものを求めているのか、それとも一定期間非アクティブな状態が続いた直後なのかはわかりません。

標準のASP.NET メカニズムを使用することに満足している場合は、大きな作業を行わずにこれを行うことができます。

メンバーシップ プロバイダーを設定します。

authentication セクションで loginUrl が定義されていることを確認します。

<authentication mode="Forms">
  <forms loginUrl="login.aspx" />
</authentication>

forms 要素の "timeout" 属性を使用して、デフォルトの 30 分以外のタイムアウトを設定できます。

<authentication mode="Forms">
  <forms loginUrl="login.aspx" timeout="15"/>
</authentication>

これにより、サイトで 15 分間非アクティブな状態が続くと (JavaScript の「ハートビート」なしでブラウザーを開いた場合、または別のサイトで 15 分間過ごした場合)、ユーザーはログアウトされます。

匿名ユーザーへのアクセスを拒否する

<authorization>
  <deny users="?" />
</authorization>

次に、 location 要素を使用して、すべてのユーザーがログイン、登録、およびパスワードを忘れた可能性があるページにアクセスできるようにします。

<location path="Logon.aspx">
  <system.web>
    <authorization>
      <allow users="?"/>
    </authorization>
  </system.web>
</location>
<location path="Register.aspx">
  <system.web>
    <authorization>
      <allow users="?"/>
    </authorization>
  </system.web>
</location>
<!-- etc -->

このようにして、ユーザーの認証 Cookie の有効期限が切れると、フォーム ページの loginUrl 要素で指定された URL にリダイレクトされます。


標準の ASP.NET メカニズムを使用していない場合は、「ベース ページ」型モデルを実装したほうがよいでしょう。

ユーザーのログイン状態をチェックする System.Web.UI.Page から継承する新しいクラスを作成し、ログインしていないかタイムアウトになっている場合は、ログイン ページにリダイレクトします。

ロックダウンするページでは、System.Web.UI.Page から継承する代わりに、基本ページ クラスから継承することができます (同様のことを行うためのこの種のセットアップの例 - 各ページの設定を確認してください)。ここで私の答えに見られる


ログイン ページには、iFrame からジャンプして戻るために、フレーム バスティング JS が必要になる可能性があります。

if (top!=self.parent){
  top.location=self.parent.location;
}

それとも、「戻る」を押すと、ブラウザのキャッシュからあなたのページを見ることができると言っているのですか? その場合、すべてのページで Cache ヘッダーをいじる必要があります。

Response.Cache.SetCacheability(HttpCacheability.NoCache);

その場合、ログイン ページに Location.Replace を実行するための JS タイマー オブジェクトも必要です。 n 分後のユーザー:

<script type="text/javascript">
  setTimeout('location.Replace("/login.aspx")', 900000);
</script>

時間はミリ秒単位なので、15 分で先に進みます。そのためだけに jQuery フレームワーク全体を用意する必要はありません。

また、メタ リフレッシュ タグを調べることもできます。

<meta http-equiv="refresh" content="900;url=http://example.com/login.aspx" />

これにより、ブラウザは 15 分 (これは秒単位) 後に強制的にログイン ページに更新されます。

于 2009-04-02T13:16:31.330 に答える
6

これは、次の方法で達成されました。

1)サーバーへのすべてのリクエスト(セッションチェックajaxリクエストを除くサーバーとajax)のタイムスタンプをセッション変数に保存します。

2) 頻繁に ajax を使用して JS 関数を介してサーバーをポーリングし、セッション タイムスタンプと ajax 要求時間の時間差がセッション タイムアウト値よりも大きいかどうかを確認し、現在のユーザーをログオフしてブール値を返します。その ajax リクエスト。

3) 返された bool が true の場合、現在のページをログイン ページにリダイレクトします。

于 2009-12-17T08:38:24.040 に答える
0

どこから始めればよいかわからない場合は、次の 4guys の記事が役に立つかもしれません: http://www.4guysfromrolla.com/webtech/110701-1.shtml

編集

既知の期間 (つまり、セッションの有効期限) が経過した後に URL にリダイレクトする場合は、jQuery タイマーが役立つようです。

お役に立てれば。

于 2009-04-02T11:43:39.807 に答える