C# asp:使用LayoutTemplate登录将创建持久cookie,无论是否选中“记住我”

C# asp:使用LayoutTemplate登录将创建持久cookie,无论是否选中“记住我”,c#,asp.net,C#,Asp.net,当我登录时,使用带有自定义布局模板的.NET 4和asp.NET登录控件,无论是否选中“记住我”复选框,该控件似乎都会创建一个身份验证cookie,并保持我登录,直到我通过单击“注销”按钮显式注销为止。在仍登录时关闭浏览器不会使我注销 有人能解释一下这可能是什么原因吗 <asp:Login ID="Login1" runat="server" OnLoggingIn="Login1_LoggingIn" OnLoggedIn="Login1_LoggedIn" OnLoginError="

当我登录时,使用带有自定义布局模板的.NET 4和asp.NET登录控件,无论是否选中“记住我”复选框,该控件似乎都会创建一个身份验证cookie,并保持我登录,直到我通过单击“注销”按钮显式注销为止。在仍登录时关闭浏览器不会使我注销

有人能解释一下这可能是什么原因吗

<asp:Login ID="Login1" runat="server" OnLoggingIn="Login1_LoggingIn" OnLoggedIn="Login1_LoggedIn" OnLoginError="Login1_LoginError">
    <LayoutTemplate>
        <asp:Panel runat="server" DefaultButton="btnLogin">
            <label>Email</label>&nbsp;<div class="required">*</div>&nbsp;
            <asp:RequiredFieldValidator runat="server" ControlToValidate="UserName" Display="Dynamic" ErrorMessage="Required" InitialValue="" SetFocusOnError="true" ValidationGroup="Login" /><br />
            <asp:TextBox runat="server" ID="UserName" class="input" ValidationGroup="Login" />
            <label>Password</label>&nbsp;<div class="required">*</div>&nbsp;
            <asp:RequiredFieldValidator runat="server" ControlToValidate="Password" Display="Dynamic" ErrorMessage="Required" InitialValue="" SetFocusOnError="true" ValidationGroup="Login" /><br />
            <asp:TextBox runat="server" ID="Password" TextMode="Password" class="input" style="margin:0 0 6px 0;" ValidationGroup="Login" />
            <asp:Checkbox runat="server" ID="RememberMe" Text="Remember me" CssClass="remember-me" />
            <asp:LinkButton runat="server" ID="btnLogin" CommandName="Login" Text="Sign In" CssClass="login-button" ValidationGroup="Login" />
        </asp:Panel>
    </LayoutTemplate>
</asp:Login>


protected void Login1_LoggingIn(object sender, LoginCancelEventArgs e)
{
    string username = Login1.UserName.Trim();

    if (IsValid)
    { 
        MembershipUser user1 = Membership.GetUser(username);
        if (user1 != null)
        {
            if (Membership.ValidateUser(user1.UserName, Login1.Password))
            { 
                Login1.UserName = user1.UserName;
            }
        }
    }


protected void Login1_LoggedIn(object sender, EventArgs e)
{
    if (Roles.IsUserInRole(Login1.UserName, "Users"))
    {
        Response.Redirect("users.aspx", true);
    }

<authentication mode="Forms">
    <forms timeout="129600" name=".AUTHCOOKIE" protection="All" slidingExpiration="true" path="/" requireSSL="false" loginUrl="~/login.aspx" cookieless="UseCookies"/>
</authentication>

电子邮件*

密码*
受保护的void Login1\u logging(对象发送方,LoginCancelEventArgs e) { 字符串username=Login1.username.Trim(); 如果(有效) { MembershipUser user1=Membership.GetUser(用户名); 如果(user1!=null) { if(Membership.ValidateUser(user1.UserName,Login1.Password)) { Login1.UserName=user1.UserName; } } } 受保护的void Login1_LoggedIn(对象发送方,事件参数e) { if(Roles.IsUserInRole(Login1.UserName,“用户”)) { 重定向(“users.aspx”,true); }
终于得到你的答案了……天哪

Login.aspx:

    <asp:Login ID="Login1" runat="server" OnLoggingIn="Login1_LoggingIn">
        <LayoutTemplate>
            <asp:Panel runat="server" DefaultButton="btnLogin">
                <label>Email</label>&nbsp;<div class="required">*</div>
                &nbsp;
    <asp:RequiredFieldValidator runat="server" ControlToValidate="UserName" Display="Dynamic" ErrorMessage="Required" InitialValue="" SetFocusOnError="true" ValidationGroup="Login" /><br />
                <asp:TextBox runat="server" ID="UserName" class="input" ValidationGroup="Login" />
                <label>Password</label>&nbsp;<div class="required">*</div>
                &nbsp;
    <asp:RequiredFieldValidator runat="server" ControlToValidate="Password" Display="Dynamic" ErrorMessage="Required" InitialValue="" SetFocusOnError="true" ValidationGroup="Login" /><br />
                <asp:TextBox runat="server" ID="Password" TextMode="Password" class="input" Style="margin: 0 0 6px 0;" ValidationGroup="Login" />
                <asp:CheckBox runat="server" ID="RememberMe" Text="Remember me" CssClass="remember-me" />
                <asp:LinkButton runat="server" ID="btnLogin" CommandName="Login" Text="Sign In" CssClass="login-button" ValidationGroup="Login" />
            </asp:Panel>
        </LayoutTemplate>
    </asp:Login>
Web.config:

<authentication mode="Forms">
    <forms timeout="129600" name=".AUTHCOOKIE" protection="All" slidingExpiration="true" path="/" requireSSL="false" loginUrl="~/login.aspx" cookieless="UseCookies">
        <credentials passwordFormat="Clear">
            <user name="test" password="test"/>
        </credentials>
    </forms>
</authentication>

补充说明:

在我的web应用程序中,我有一个名为“Protected”的文件夹和一个名为“Users.aspx”的文件以及另一个名为web.Config的文件。“Protected”文件夹中的web.Config具有以下功能:不允许匿名用户,只允许“test”用户:



我在登录后关闭了所有chrome实例,然后转到users.aspx页面,当然,有人要求我再次登录!我知道这段代码与您的不完全一样,但您应该能够修改代码以采用它。

感谢您的回复,但这不起作用。我在if中添加了RedirectFromLoginPage()(Membership.ValidateUser())在成功登录并取消选中“记住我”后,我关闭浏览器窗口,然后返回到网站,我仍然登录。这是在我们的测试服务器上,而不是本地主机上。您是否关闭了整个浏览器或只是选项卡?因为我尝试关闭整个浏览器和所有实例,它对我有效…嗯…让我看看是否可以想出一些其他的方法。这就是我得到答案的地方,对他来说是有效的:好的,试试这个:FormsAuthentication.SetAuthCookie(用户名,false);Response.Redirect(Request.RawUrl);我要做的另一件事是检查auth cookie的过期日期。
<authentication mode="Forms">
    <forms timeout="129600" name=".AUTHCOOKIE" protection="All" slidingExpiration="true" path="/" requireSSL="false" loginUrl="~/login.aspx" cookieless="UseCookies">
        <credentials passwordFormat="Clear">
            <user name="test" password="test"/>
        </credentials>
    </forms>
</authentication>
<configuration>
    <system.web>
        <authorization>
            <deny users="?"/>
            <allow users="test"/>
        </authorization>
    </system.web>
</configuration>