0

asp.net ログイン コントロール (asp.net 構成から提供されたコントロール) をセットアップしましたが、正常に動作しています。

web.config にコードを追加して、3 分後にユーザーを自動的にログアウトするようにしました。

<authentication mode="Forms">
  <!-- Autologout after xxx min. to login.aspx -->
  <forms loginUrl="~/login.aspx" defaultUrl="~/login.aspx" slidingExpiration="true" timeout="3"/>
</authentication>

そのコードを使用すると、自動ログアウトが行われ、3 分後にリンクをクリックすると、ログイン ページが表示されます。

これはどのように作動しますか?ログインから3分ですか、それとも3分間の非アクティブ後ですか!?

また、ログインページにラベルを追加して、ログインページにリダイレクトされた理由をユーザーに伝えることはできますか?

最後に、3 分後にユーザーをログイン ページにリダイレクトする方法を教えてください。3分後ではありません。次に、ユーザーがリンクをクリックすると、3 分後に更新され (非アクティブの場合)、自動的にログイン ページにジャンプし、自分のラベルをテキストで表示して、ログインしていない理由を説明します!??

................................................................... ................................................................... ................................................................... ...................................

いいえを見ると、うまくいきません。2 ソリューション。

私のメインページ (code_behind) では、これを page_load Session("logintime") = DateTime.Now.ToString() に応答書き込みで持っています。メインページでこれを取得します 01-10-2012 18:30:42、現在は 18 :37:25 まだリダイレクトされておらず、プラウサー ウィンドウでまったく操作を行っていません。

メインページの私のコードは.

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="default.aspx.vb" Inherits="_default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript">
var count = 30000
var timeLoggedIn = new Date('<%=Session("logintime")%>')
var timeLogOut = new Date('<%=Session("logoutTime") %>');

setTimeout(LoggedInCheck(), 30000);

function LoggedInCheck() {
    var now = new Date();
    var now_utc = new Date(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds());
    if (now_utc > timeLogOut) {
        window.location = "http://www.google.dk";
    }
}

function countDown() {
    if (count <= 0) {
       // window.location = redirect;
    } else {
        count--;
        document.getElementById("timer").innerHTML = "This page will redirect in " + count + " seconds."
        setTimeout("countDown()", 1000)
    }
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<span id="timer">  
<script>
countDown();
</script>  
</span> 
</div>
</form>
</body>
</html>

Code_behind

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not IsPostBack Then
        Session("logintime") = DateTime.Now.ToUniversalTime().ToString("MM/dd/yyyy hh:mm:ss")
        Session("logoutTime") = DateTime.Now.ToUniversalTime().AddMinutes(3).ToString("MM/dd/yyyy hh:mm:ss")

        Response.Write("time now: " & Session("logintime"))
        Response.Write("<br />")
        Response.Write("reload at time: " & Session("logoutTime"))
    End If

End Sub
4

4 に答える 4

0

最初のアプローチの1つは、ユーザーが制限されたページにアクセスしようとして、自動ログアウトのためにアクセスできない場合、サーバーはユーザーをログインページに配置しますが、ReturnURLと呼ばれるPOST変数を使用します。Tryこの変数を読むことができますが、そうでないNothing場合は、自動ログアウトのためにユーザーがそこにいると考えることができます...

于 2012-10-02T21:16:16.243 に答える
0

MSDNページからSlidingExpiration

スライド有効期限は、リクエストが行われ、タイムアウト間隔の半分以上が経過した場合に、有効な認証 Cookie の有効期限をリセットします。Cookie の有効期限が切れた場合、ユーザーは再認証する必要があります。

つまり、3 分間の非アクティブ状態の後であると言えます。

再。自動ログアウト メッセージ、この SOの質問とその回答は、良い出発点になります。

于 2012-10-01T13:40:27.353 に答える
0

おそらくユーザーがログインした時間をセッションに保存してから、それを評価する必要があります。クッキーを使用して時間を期限切れにすることもできます。

または、JavaScript を調べることもできます >> http://jsfiddle.net/F8umt/3/

ただし、ユーザーがログインした時間を保存する必要があります。私の理解では、ユーザーがログインカウンターをリセットするタスクを実行するたびに、スクリプトが更新される可能性があります。基本的に、ログイン時間を作成してから決定する必要があります。

コードを更新してテストしましたが、私のマシンでは問題なく動作しているようです。問題は、Date.Parse が正しくキャストしなかったため、コードを少し変更したことです。これがうまくいくかどうか投票してください。

また、セッションと Cookie を強制終了するページにリダイレクトしてから、ログイン ページに再度バウンスする可能性があります。そうしないと、このコードも機能しません。

于 2012-10-01T14:34:48.987 に答える
-2

これが解決策です。

web.config に追加します。

<sessionState timeout="3"></sessionState> 

分でその作業を覚えています。

自動ログアウトをテストする必要があるページで、これを code_behind で使用して、javascript を開始します。

Partial Class _default
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not IsPostBack Then
        Page.ClientScript.RegisterStartupScript(Me.[GetType](), "onLoad", "DisplaySessionTimeout()", True)
        Response.Write(Session.Timeout)
    End If

End Sub

End Class

web.configから適切なsession.timeoutを取得することをテストするためだけに、response.writeは必要ありません。

あなたのメインページでこのコードを使用してください(カウンター彼女は必要ありません。これはテスト用であるため、いつリダイレクトされるかがわかります)

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript">
    var sessionTimeout = "<%= Session.Timeout %>";
    var count = 60 * sessionTimeout
    function DisplaySessionTimeout() {
        setTimeout("location.href='http://www.google.com';", 60000 * sessionTimeout);
    }

    function countDown() {
        count--;
        document.getElementById("timer").innerHTML = "This page will redirect in " + count + " seconds."
        setTimeout("countDown()", 1000)
    }
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<span id="timer">  
<script>
countDown();
</script>  
</span> 
</div>
</form>
</body>
</html>

ここでは、session.timeout を取得し、* 60000 ミリでそれを実行します。秒 3分後です。ログイン ページまたはこの場合は google にリダイレクトされます。

session.timeout がアクティビティの前にリセットされたときにカウンターがリセットされるかどうかを確認するために gridview でテストする時間がないので、それをテストする必要がありますが、ここに作業コードがあります。

于 2012-10-03T19:02:46.837 に答える