2013-11-21 66 views
0

我使用asp:登录控件来验证用户名和密码。以下是控制。要跟踪登录尝试,我使用会话变量LoginCount。我们只允许三次尝试。另外,我们使用WebControlAdapter来定制asp:登录控件。但不知何故,有时,事件处理程序Login1_Authenticat会被调用两次,这会使LoginCount增加2,只需一次尝试即可。任何人都可以帮我弄清楚哪里出了问题?为什么我的onauthenticate事件处理程序有时被调用两次?

<asp:Login 
     ID="Login1" 
     runat="server" 
     OnAuthenticate="Login1_Authenticate" 
     DestinationPageUrl="index.aspx" TitleText="" DisplayRememberMe="false" UserNameRequiredErrorMessage="Username is required." PasswordRequiredErrorMessage="Password is required." 
    /> 

    public class LoginAdapter : System.Web.UI.WebControls.Adapters.WebControlAdapter 
    { 
     private enum State 
     { 
      LoggingIn, 
      Failed, 
      Success, 
     } 
     State _state = State.LoggingIn; 

     ...  
     public LoginAdapter() 
     { 
      _state = State.LoggingIn; 
     } 

     /// /////////////////////////////////////////////////////////////////////////////// 
     /// PROTECTED   

     protected override void OnInit(EventArgs e) 
     { 
      base.OnInit(e); 

      Login login = Control as Login; 
      if (Extender.AdapterEnabled && (login != null)) 
      { 
       RegisterScripts(); 
       login.LoggedIn += OnLoggedIn; 
       login.LoginError += OnLoginError; 
       _state = State.LoggingIn; 
      } 
     } 
... 

更新:它原来是LoginAdapter中的一个错误。我厌倦了下面的链接提供的修复程序,它工作。 https://cssfriendly.codeplex.com/workitem/234

+0

用户会话是由cookie标识的,所以只要用户不保留会话cookie,他可以尝试多次登录,如他所愿,是正确的? –

回答

0

也许是因为您的用户在登录按钮上单击两次?在发布到服务器之前,使用一些js代码禁用客户端的按钮怎么样?向OnClientClick添加一个javascript函数以禁用按钮并避免这种情况。

+0

不,我在调试时遇到问题。如果我禁用了webcontroladapter,问题就消失了。我怀疑webcontroladapter部分有问题,但不知道在哪里。 – GLP

相关问题