2012-09-29 2 views
0

asp.net 로그인 컨트롤 (asp.net 구성에서 제공된 컨트롤) 설치하고 잘 작동합니다.Asp.net 로그인 제어 Autologout/AutoRedirect 및 레이블 값

3 분 후에 자동으로 사용자를 로그 아웃하도록 코드가 web.config에 추가되었습니다.

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

해당 코드를 사용하는 경우 autologout이 표시되고 3 분 후에 링크를 클릭하면 로그인 페이지가 표시됩니다.

어떻게 작동합니까? 그것은 로그인에서 3 분 또는 3 분의 비활성 후입니까?

또한 로그인 페이지에 레이블을 추가 한 다음 사용자에게 로그인 페이지로 리디렉션되는 이유를 알려줄 수 있습니까 (예)?

마지막으로 3 분 후에 사용자를 로그인 페이지로 리디렉션 할 수 있습니까? 그래서 3 분 후에는 아닙니다. 사용자가 링크를 클릭했지만 3 분이 지나면 새로 고침 (비활성 상태 인 경우) 후 로그인 페이지로 자동 이동하여 텍스트가있는 내 레이블을 표시하고 왜 로그인하지 않았는지 설명합니다. ??

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

아니오를 보면 작동하지 않습니다. 2 솔루션.

메인 페이지 (code_behind)에 다음과 같은 페이지가 있습니다. 세션 ("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 

답변

-2

이 솔루션이기 때문에 사용자가 있다고 생각할 수있는 경우 Try이 varible를 읽고 할 수 있습니다.

web.config에서 추가하십시오.

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

최소 작동 시간을 기억하십시오.

페이지에서 autogout을 테스트하려면 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 

URL에서 web.config의 session.timeout을 min으로 테스트하는 경우에만 response.write를 사용하지 않아도됩니다. UR 메인 페이지 사용에

이 코드는 *

다음
<!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을 복용하고 (U는 테스트를 위해 너무 U는이 유를 할 때는 반드시 알고 그 카운터 그녀를, 필요 없어요) 그것 60000 밀리와 함께. 비서. 그래서 3 분 후. 로그인 페이지 또는이 경우 Google로 리디렉션됩니다.

내가 havent 그 gridview와 그것의 카운터를 재설정, session.timeout가 활동의 BC 재설정됩니다 볼 수있는 시간이있어, 그래서 그걸 테스트해야하지만, 여기에 작동 코드입니다.

0

MSDN pageSlidingExpiration에 : 요청이되어있는 경우

슬라이딩 만료가 유효한 인증 쿠키의 만료 시간을 재설정 더 타임 아웃의 절반 이상 간격이 경과했습니다. 쿠키가 만료되면 사용자는 다시 인증을 받아야합니다.

그래서 3 분간 사용하지 않으면 말할 수 있습니다.

Re. 자동 로그 아웃 메시지 인 this SO question과 그 대답은 좋은 출발점이 될 수 있습니다.

+0

plz. 주요 질문에 추가 된 코드를 참조하십시오. –

0

세션에 사용자가 로그인 한 다음 평가 한 시간을 저장하는 것이 바람직합니다. 쿠키를 사용하여 시간을 소진 할 수도 있습니다.

또는 당신 http://jsfiddle.net/F8umt/3/

>> 자바 스크립트로 볼 수 있습니다하지만 당신은 사용자가 로그인 한 시간을 저장해야합니다. 내 이해 스크립트는 사용자가 로그인 카운터를 재설정 작업을 수행 할 때마다 새로 고칠 수 있습니다에서 . 당신은 기본적으로 로그인 된 시간을 생성하고 그 시간부터 결정해야합니다.

코드를 업데이트하고 테스트했는데 내 컴퓨터에서 제대로 작동하는 것으로 보입니다. 문제는 Date.Parse가 잘못 캐스팅하여 코드를 약간 변경했기 때문입니다. 이 방법이 효과가 있으면 투표하십시오.

LogIn 페이지로 다시 전송하기 전에 세션과 쿠키를 죽이는 페이지로 리디렉션 할 수도 있습니다. 그렇지 않으면이 코드가 제대로 작동하지 않습니다.

+0

메신저하지만, 자동으로 다시로드하지 말고, 내 주요 질문을 참조하십시오, 내가 지금 가지고있는, 나는이 2 개의 텍스트가있는 페이지를 가지고 있고 6 분 후에. 그것의 여전히 동일한 텍스트. 지금가요 : 03-10-2012 10:20:11 시간에 새로 고침 : 03-10-2012 10:23:11 –

+0

코드가 업데이트되어 확인하십시오. – TheMonkeyMan

+0

안녕하세요 Deano, 3 분 후에 다시로드하지 않습니다. 세션을 삭제하면 날짜 등을 얻을 수 있으며 간단한 settimeout을 추가하면 카운터가 추가되어 다시로드 할 때 알 수 있습니다.하지만 3 분 후에 아무 일도 일어나지 않습니다. 카운터가 루프에서 실행되고 있으므로 30000에서 시작하여 0에 도달하면 새 코드에 대한 주요 질문을 참조하십시오. –

0

글쎄요, 사용자가 제한된 페이지에 액세스하려하고 자동 로그 아웃으로 인해 액세스 할 수없는 경우 서버는 로그인 페이지에 그를 넣었지만 ReturnURL이라는 POST 변수를 사용했습니다. 하지 Nothing, 당신은 자동 로그 아웃이 ...