2012-09-29 19 views
0

我已经设置了一个asp.net登录控件(从asp.net配置提供的控件),它工作正常。Asp.net登录控制Autologout/AutoRedirect和标签值

我已将代码添加到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> 

如果使用该代码,那么我会得到autologout,如果在3分钟后点击链接,然后进入登录页面。

这是如何工作的?是登录3分钟还是3分钟不活动!

另外,我可以在我的登录页面添加一个标签,然后它会告诉用户他/她为什么重定向到登录页面,如果是的话,怎么样?

最后:我怎样才能在3分钟后将用户重定向到登录页面。所以它不是3分钟后。然后当用户点击一个链接,但在3分钟后,刷新(如果不活动),然后自动跳转到登录页面并用文本显示我的标签,说明他/她没有登录的原因!

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

我无法得到它的工作,如果我们看看没有。 2解决方案。我有这个在page_load会话(“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

这是解决方案。

在web.config中添加。

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

记住它的工作分钟。

U上需要测试在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 

ü不需要将它的Response.Write只是为了测试它从web.config中得到正确的查看Session.Timeout在分钟。

乌尔主要页面使用此代码,(U不需要柜台她的,它只是为了测试你还是你知道什么时候它重定向U)

<!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分钟后。将重定向到登录页面或在这种情况下谷歌。

我没有得到时间用gridview测试它,看看它是否重置计数器,当session.timeout重置bc的activity时,所以你需要测试一下,但这里是一个工作代码。

0

MSDN pageSlidingExpiration:一个有效的身份验证cookie,如果提出要求,并

滑动到期重置过期时间超过了超时的一半间隔已过。如果cookie过期,用户必须重新进行身份验证。

所以你可以说这是在3'不活动之后。

Re。自动注销消息this SO question及其答案可以为您提供一个很好的起点。

+0

plz。请参阅主要问题中的附加代码。 –

0

您需要优先存储在会话中,或许用户登录的时间,然后评估。你也可以使用一个cookie来过期你的时间。

或者你可以看看到的JavaScript >>http://jsfiddle.net/F8umt/3/

但是你要存储用户登录的时间。你从我了解你的脚本可以被刷新每个用户做一个重置登录计数器任务时。你需要基本上创建一个登录时间,然后从中确定。

我已经更新了代码和测试,它似乎在我的机器上正常工作。问题在于Date.Parse错误地转换了它,所以我稍微改变了它的代码。请投票,如果这对你有用。

还有可能重定向到一个网页,他们反弹到登录页面,再次否则该代码将无法正常工作,以及之前杀死会话和饼干。

+0

即时可以说,但它不会自动重新加载,请参阅我的主要问题,因为我现在有cde,我有一个包含这两个文本的页面,以及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变量。您可以Try阅读本varible,如果不Nothing,你可以认为的用户是因为有自动注销...