当前位置:  开发笔记 > 后端 > 正文

使用ASP .Net Membership保持用户登录持久性

如何解决《使用ASP.NetMembership保持用户登录持久性》经验,为你挑选了2个好方法。

我有一个使用sql成员资格提供程序构建在ASP.NET 3.5和SQL Server 2005中的网站,并且可能是表单身份验证.

由于我网站上的安全需求非常低,我想进行一次身份验证,然后无限期地保持登录(不给用户选择).

发生的事情是用户登录,保持登录会话,然后下次他们到达时,他们会被注销.

如何保持登录?

这是技术细节,我已经尝试了许多持续时间的变化.

 Try
            If Membership.ValidateUser(UserName.Text, Password.Text) Then
                Security.UserManager.AuthenticateUser(UserName.Text)

                If FormsAuthentication.GetRedirectUrl(UserName.Text, False) = "/default.aspx" Then
                    Try
                        'Custom Logic'
                    Catch Ex As Exception
                        'Custom Error handling'
                    End Try
                Else
                    FormsAuthentication.RedirectFromLoginPage(UserName.Text, True)
                End If
            End If
        Catch ex As Exception
            RaiseEvent ExceptionThrown(New ApplicationException("An error occurred trying to log the user in after account creation.", ex))
        End Try

Public Shared Sub AuthenticateUser(ByVal Username As String)
    Dim Expiration As DateTime = DateTime.Now.AddMonths(3)

    Dim authTicket As FormsAuthenticationTicket = New FormsAuthenticationTicket(Username, True, Expiration.Subtract(Expiration).TotalMinutes)
    Dim EncryptedTicket As String = FormsAuthentication.Encrypt(authTicket)
    Dim AuthCookie As New HttpCookie(FormsAuthentication.FormsCookieName, EncryptedTicket)
    AuthCookie.Expires = Expiration
    HttpContext.Current.Response.Cookies.Add(AuthCookie)
End Sub

Web配置:


   
      
      
   




    

编辑:以下是客户端存储的cookie信息:

Name    ASP.NET_SessionId
Value   r4dz1555f1pdne45n1zrlkmg
Host    SITEADDRESS.com
Path    /
Secure  No
Expires At End Of Session

Name    .ASPXAUTH
Value   648767AC72A60DBA49650A361A2FA446BA992F792055EF5B488CADC95DF495315C1C577F1C8E67E67BD937A7AB6CC5DAED85D8D64E4ED7867FC0FC395F48FED7FB631033CE441DE85223E8B3EBAE616C
Host    www.SITEADDRESS.com
Path    /
Secure  No
Expires Tue, 09 Jun 2009 17:51:31 GMT

Name    ASP.NET_SessionId
Value   gn5pcymhfsnua455yp45wpej
Host    www.SITEADDRESS.com
Path    /
Secure  No
Expires At End Of Session

Name    SITENAME
Value   9610E8515F3DBC088DAC286E1F44311A20CB2BBB57C97F906F49BC878A6C6AC0B9011777402AEA130DCDC521EF4FBB3393DB310083F72EB502AE971183306C24F07F696B3695C67DD73166F1653DF52B
Host    www.SITEADDRESS.com
Path    /
Secure  No
Expires Tue, 20 Dec 2011 06:14:10 GMT

Tom Halladay.. 21

我终于找到了最后一块拼图.当我的服务器的应用程序池被回收(由托管提供商配置)时,正在自动重新生成视图状态加密密钥.这意味着即使cookie有效且未过期(返回前访问),当用户返回时,encyrption也已更改,并且cookie不再有效.

解决方案是手动指定静态验证密钥.以下链接可用于为此生成必要的web.config标记.

http://www.aspnetresources.com/tools/keycreator.aspx

更新:

这是一个更可配置的站点来生成机器密钥

源树 - Generage属性

我意识到这可能会对安全性产生轻微的影响,我想在理论上如果你的密钥被强制破坏并且破坏你可能在视图状态下存储的任何数据,那么更换密钥更安全,但你可能不应该存储敏感视图中的信息,因为它本身并不安全.

例:


  
    
  

仅供参考,这两个链接现已死亡 (4认同)


Paul Suart.. 19

我认为你最好使用这种FormsAuthentication.SetAuthCookie方法而不是自己编写很多代码.

我相信您在web.config中的成员资格提供程序设置可能与您在代码中提供的设置相冲突,而且您没有提供Cookie名称.

请尝试以下方法:

if (Membership.ValidateUser(userName, password))
{
    FormsAuthentication.SetAuthCookie(userName, true); //Creates a cookie named "XXXAuth" - see settings in web.config below
}

结合web.config中的以下设置:


    




    
        
        
    

如果您确实要创建无限期登录时段,只需将身份验证块中的"超时"值更改为更长的值.我相信432000 = 5天.

如果您希望用户能够明确注销,只需调用以下方法以响应按钮单击(或其他):

FormsAuthentication.SignOut();

希望这可以帮助.



1> Tom Halladay..:

我终于找到了最后一块拼图.当我的服务器的应用程序池被回收(由托管提供商配置)时,正在自动重新生成视图状态加密密钥.这意味着即使cookie有效且未过期(返回前访问),当用户返回时,encyrption也已更改,并且cookie不再有效.

解决方案是手动指定静态验证密钥.以下链接可用于为此生成必要的web.config标记.

http://www.aspnetresources.com/tools/keycreator.aspx

更新:

这是一个更可配置的站点来生成机器密钥

源树 - Generage属性

我意识到这可能会对安全性产生轻微的影响,我想在理论上如果你的密钥被强制破坏并且破坏你可能在视图状态下存储的任何数据,那么更换密钥更安全,但你可能不应该存储敏感视图中的信息,因为它本身并不安全.

例:


  
    
  


仅供参考,这两个链接现已死亡

2> Paul Suart..:

我认为你最好使用这种FormsAuthentication.SetAuthCookie方法而不是自己编写很多代码.

我相信您在web.config中的成员资格提供程序设置可能与您在代码中提供的设置相冲突,而且您没有提供Cookie名称.

请尝试以下方法:

if (Membership.ValidateUser(userName, password))
{
    FormsAuthentication.SetAuthCookie(userName, true); //Creates a cookie named "XXXAuth" - see settings in web.config below
}

结合web.config中的以下设置:


    




    
        
        
    

如果您确实要创建无限期登录时段,只需将身份验证块中的"超时"值更改为更长的值.我相信432000 = 5天.

如果您希望用户能够明确注销,只需调用以下方法以响应按钮单击(或其他):

FormsAuthentication.SignOut();

希望这可以帮助.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有