【发布时间】:2011-07-31 06:29:47
【问题描述】:
几周前,我们的一位客户联系我们说,有时当他创建活动时,它会以其他人的名义创建!
我们进行了一些故障排除,但找不到任何东西。我们要求用户在下次遇到这些问题时与我们联系。他确实联系了我们,我们得以与他进行了一次会面,并亲眼看到了这个问题。
不仅是活动,他在应用程序中被识别为其他人。他可以访问其他人应该可以访问的所有内容。那时我们意识到我们遇到了一个会话混淆问题。
关于我们的代码的一点点:
像任何其他应用程序一样,我们有一个简单的登录页面,用户输入电子邮件和密码,然后我们根据我们的数据库对它们进行身份验证,如果它们有效,我们调用 FormsAuthentication.SetAuthCookie() 将当前用户 ID 保存在 cookie 中,然后让他进入。
BL.User currentUser = BL.User.Authenticate(txtUsername.Text, txtPassword.Text);
if (currentUser != null)
{
this.Session["NumberOfLoginTried"] = "0";
FormsAuthentication.SetAuthCookie(currentUser.UserID.ToString(), chRememberMe.Checked);
Response.Redirect(FormsAuthentication.GetRedirectUrl(currentUser.UserID.ToString(), false));
}
我们还使用以下代码在我们的应用程序中获取登录用户 ID(当前用户)。
public static int GetCurrentUserID()
{
int userID = -1;
int.TryParse(HttpContext.Current.User.Identity.Name, out userID);
return userID;
}
是的,我们做了功课并用谷歌搜索了以下两个链接:
http://lionsden.co.il/codeden/?p=446
ASP.NET Session Mix-up using StateServer (SCARY!)
我们为 .aspx 和 .ascx 文件禁用了内核模式缓存和用户模式缓存,这种情况仍在发生。
P.S- 该应用程序在带有 IIS 7.5 的 Windows 2008 R2 上运行。我们不使用无 cookie 会话。
【问题讨论】:
-
您的用户是否选中了“记住我”框?并且您的用户正在更改为哪个错误用户是否有任何模式(例如,它总是同一个用户吗?是同一位置的另一个用户(如果是的话,大提示),是另一个登录用户等)?
-
@houda,您将会话存储在哪里? (sql, mem ?) 如果它在 sql 上,你是否每分钟运行一次自动清除脚本?另外,为什么错误出现在那个功能上?也许您还有其他一些错误。你使用 WebGarden 吗? (很多asp.net进程?)
-
@houda 还有可能是页面存储在代理上,而你的用户看到以前用户代理存储的页面!您是否设置了“无缓存”?并且不允许代理?页面是 https 吗?您的客户是否在通过代理路由器连接到互联网的办公室?
-
@houda,我对您的 GetCurrentUserID 例程感到困惑——您为什么希望 HttpContext.Current.User.Identity.Name 解析为 int?另外,如果 TryParse 失败,它会将 userID 设置为 0,而不是将其设置为 -1。
-
@Ken 这都是随机的,我找不到任何模式。
标签: asp.net iis-7.5 session-cookies