4

私は他の4人とグループプロジェクトを行っています。C# が埋め込まれた MVC4 の ASP.NET でジョブ キオスクを設計しています。

ユーザーが 10 分間アイドル状態の場合、システムがユーザーをログアウトするように取り組んでいます。システムがユーザーをログアウトする方法のコーディングを開始する方法について、助けが必要です。

4

5 に答える 5

3

FormsAuthentication を使用している場合の方法は次のとおりです。

コントローラーのアクション:

public ActionResult CheckLogin()
{
    if (Request.Cookies["CookieName"] == null) return Json(0, JsonRequestBehavior.AllowGet);
    var cookie = Request.Cookies["CookieName"].Value;
    var ticket = FormsAuthentication.Decrypt(cookie);
    var secondsRemaining = Math.Round((ticket.Expiration - DateTime.Now).TotalSeconds, 0);
    return Json(secondsRemaining, JsonRequestBehavior.AllowGet);
}

各ページまたはレイアウト ページでの Jquery:

<script>
    $(function () {
        setTimeout(doStuff, 1000);
    });
    function doStuff() {
        $.ajax("/CheckLogin").done(function (data) {
            if (data <= 60) {
                startLogout(data);
            } else {
                setTimeout(doStuff, 1000);
            }
        });
    }

    function startLogout(seconds) {
        var countdown = setInterval(function () {
            //Show something here
            if (count == 0) {
                clearInterval(countdown);
                //Do something here
            }
            seconds--;
        }, 1000);
    }
</script>
于 2014-09-25T20:55:48.217 に答える
1

それらを自動的にログアウトさせる必要がある場合は、web.config セッション タイムアウトを設定するという Linus Caldwell の提案から始めてください。彼の例では 30 分を示しているので、10 に変更するだけです。ただし、ユーザーは、実際にサーバー リソースを要求しようとするまで、ログアウトしたことを知りません。それを自動的に行うには、いくつかの方法があります。どちらの方法でも、タイムアウト期間が経過した後にページが自動的に更新されます。1 つの方法は、javascript タイマーを使用することです。もう 1 つは、各ページに更新ヘッダーを追加することです。

<script type="text/javascript">
var seconds = 60 * 11;// set timer for 11 minutes (1 minutes after session expires)
countdown();
function countdown(){
   seconds--;
   if (seconds <= 0){
          window.location.reload(); // force a refresh.
   }else{
          setTimeout('countdown()', 1000);
   }
}
</script>

もう 1 つの方法は、global.asax にあります。

protected void Application_BeginRequest()
{
    Response.Headers.Add("Refresh", Convert.ToString(Session.Timeout * 11));
}
于 2013-04-14T17:27:35.367 に答える