我在我正在编写的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>