Asp.net会话交叉/混合

前端之家收集整理的这篇文章主要介绍了Asp.net会话交叉/混合前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
几周前,我们有一位客户与我们联系,说有时当他创建一个活动时,它会以别人的名字创建!

我们做了一些故障排除,找不到任何东西.下次遇到这些问题时,我们要求用户与我们联系.他确实与我们联系了,我们能够和他一起去打乒乓球,用自己的眼睛看待这个问题.

他不仅是活动,而且被认定为应用程序中的其他人.他可以访问其他人应该访问的所有内容.那是当我们意识到我们正在混合一个问题的时候.

一点关于我们的代码
像任何其他应用程序一样,我们有一个简单的登录页面,用户输入电子邮件和密码,我们会根据我们的数据库进行身份验证,如果它们有效,我们将调用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会话.

解决方法

我们刚刚遇到了一个非常相似的问题,这个问题随机发生,似乎是不可重复的.

问题原来是ASP.NET页面缓存机制 – 在我们的例子中,特别是<%@ OutputCache标签. 我们使用了一条线
<%@ OutputCache NoStore =“true”持续时间=“1”%>这基本上意味着如果两个用户在1秒钟内访问同一页面,他们将看到相同的页面(包括其他用户登录用户名).所以如果他们刷新页面,他们得到了正确的信息.

在我们的情况下,改变这一行
<%@ OutputCache NoStore =“true”持续时间=“1”VaryByParam =“*”%>在IIS中禁用内核缓存(http://lionsden.co.il/codeden/?p=446)

并在相关页面的Page_Load事件中添加以下行:

Response.CacheControl = "private";
Response.ExpiresAbsolute = DateTime.Now.AddDays(-1d);
Response.Cache.SetCacheability(HttpCacheability.NoCache);

似乎已经解决了我们的问题.希望这可以帮助别人遇到类似的问题.

猜你在找的asp.Net相关文章