从ASP.NET登录控件中识别回发

时间:2010-10-06 23:16:10

标签: asp.net redirect webforms login wizard

我有<asp:Wizard>仅适用于已注销的用户。如果用户当前已登录,则他/她将被重定向到另一个页面。在其中一个向导步骤中,作为向导的一部分,我通过<asp:Login>控件请求凭据并登录用户。这提出了一个问题。

According to MSDN:“当用户使用Login控件登录网站时,视图状态中的所有数据和所有发布数据都将丢失。请勿在依赖于此的LoggedIn事件中执行操作查看状态。“

因此,我的向导控件会在登录过程后忘记它所执行的步骤。 MSDN recommends:“如果您将Login控件嵌入到WizardStep对象中,则在用户通过身份验证时,在Page_Load事件处理程序中显式设置ActiveStepIndex属性。在此方案中,Wizard控件不会自动前进到下一个WizardStep对象。 “

但是,由于所有视图状态都将丢失,因此登录用户的重定向会启动,从而使用户远离页面。在页面加载时,确定用户所处状态的最佳方法是什么?

  • 前段时间已经登录;需要重定向。
  • 刚从向导内部登录;需要进入下一个向导步骤。

感谢任何想法。

2 个答案:

答案 0 :(得分:1)

您可以在用户登录时设置会话变量:Session("LoggedIn") = Now

检查重定向用户时,请至少在3分钟前检查LoggedIn,然后重定向。 因为您在登录后设置此Session变量将可用(如果未登录,则可能为null)。

您可能希望创建一个继承自Login的自定义Login控件,该控件在用户登录时设置此Session变量:

Public Class MyLogin : Inherits Login
    Private Sub MyLogin_LoggedIn() Handles Me.LoggedIn
        HttpContext.Current.Session("LoggedIn") = Now
    End Sub
End Class

答案 1 :(得分:1)

“一场奇怪的比赛。唯一的胜利就是不打比赛。”参考War Games

不是播放防止重定向的游戏,而是可以采用不同的解决方案。由于我控制了相关页面的所有链接,因此当用户登录时,我可以将这些链接的目标(href)更改为重定向后页面。这绕过了在页面本身“播放”的需要,并允许页面(如果被登录用户命中)始终跳转到适当的下一个向导步骤。