获取会话ID会导致用户注销

时间:2015-06-11 15:13:14

标签: asp.net webforms session-state

我在我正在编写的ASP.NET应用程序中观察到非常奇怪的行为,并通过从VS2013模板创建一个vanilla应用程序并更改一行来重现该问题...

背景 在Login.aspx页面的LogIn事件中,我在用户成功登录时从当前Session中检索sessionID。我通过添加以下行在SignInStatus.Success的case语句中执行此操作:

var sessionId = Session.SessionID;

添加此行后,我无法再登录。键入用户名和密码只会跳回默认页面,而不会将用户显示为已登录。

如果我删除该行,则登录按预期工作。

要重现: 在VS2013中,创建一个新的ASP.NET Web应用程序。选择Web窗体模板。将身份验证更改为单个用户帐户。 Untick Host in the cloud。 Untick MVC和Web API。

创建应用程序后,将Login.aspx.cs中的LogIn更改为如下所示:

    protected void LogIn(object sender, EventArgs e)
    {
        if (IsValid)
        {
            // Validate the user password
            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
            var signinManager = Context.GetOwinContext().GetUserManager<ApplicationSignInManager>();

            // This doen't count login failures towards account lockout
            // To enable password failures to trigger lockout, change to shouldLockout: true
            var result = signinManager.PasswordSignIn(Email.Text, Password.Text, RememberMe.Checked, shouldLockout: false);

            switch (result)
            {
                case SignInStatus.Success:

                    var sessionId = Session.SessionID;

                    IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
                    break;

注册用户后,注销。尝试再次登录,但它无法正常工作。

如果再次删除SessionId行,它将允许您登录。<​​/ p>

0 个答案:

没有答案