我的 asp.net Web 表单应用程序托管在具有表单身份验证的 IIS8 内部网中。对于一次一个用户,此应用程序完全可以正常工作。但是问题出在多个用户身上。以两个用户为例来解释问题。
问题是当用户 A 登录到应用程序并执行任何导航时。同时,其他用户B登录到应用程序并执行任何导航。现在同时,如果用户A刷新浏览器,则用户A意识到他的会话转换为UserB会话(最近登录(,这也是奇怪和奇怪的。 两个用户在不同的机器/系统和位置上。我不知道我应该怎么称呼这个问题。
我认为我的配置/代码中缺少一些点。我的代码和配置如下。
在 C# 中,验证用户凭据后,我使用以下代码段FormsAuthentication.RedirectFromLoginPage(UserId, false);
在 Web.config 中
<sessionState mode="InProc" timeout="20"></sessionState>
<authentication mode="Forms">
<forms name=".ASPXFORMSAUTH" loginUrl="LogIn.aspx" cookieless="UseCookies" requireSSL="false" path="/" timeout="30" defaultUrl="Welcome.aspx" protection="All"/>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
我正在使用以下 URL 访问我的托管应用程序:
http://SERVER_NAME:8020/LogIn.aspx
请建议,我做错了什么或错过了任何重要步骤。
成功登录后尝试记录SessionID
,以便验证这些会话是否相同。
此外,有可能在重定向逻辑期间生成相同的身份验证票证。这取决于我们如何控制 cookie 的生成。
private void cmdLogin_ServerClick(object sender, System.EventArgs e)
{
if (ValidateUser(txtUserName.Value,txtUserPass.Value) )
{
FormsAuthenticationTicket tkt;
string cookiestr;
HttpCookie ck;
tkt = new FormsAuthenticationTicket(1, txtUserName.Value, DateTime.Now,
DateTime.Now.AddMinutes(30), chkPersistCookie.Checked, "your custom data");
cookiestr = FormsAuthentication.Encrypt(tkt);
ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
if (chkPersistCookie.Checked)
ck.Expires=tkt.Expiration;
ck.Path = FormsAuthentication.FormsCookiePath;
Response.Cookies.Add(ck);
string strRedirect;
strRedirect = Request["ReturnUrl"];
if (strRedirect==null)
strRedirect = "default.aspx";
Response.Redirect(strRedirect, true);
}
else
Response.Redirect("logon.aspx", true);
}
查看此内容以获取更多详细信息。
https://support.microsoft.com/en-us/help/301240/how-to-implement-forms-based-authentication-in-your-asp-net-applicatio 如果问题仍然存在,请随时告诉我。