gpt4 book ai didi

Asp.net session 越界/混淆

转载 作者:行者123 更新时间:2023-12-03 13:55:24 25 4
gpt4 key购买 nike

几周前,我们的一位客户联系我们说,有时当他创建事件时,它会以其他人的名义创建!

我们进行了一些故障排除,但找不到任何东西。我们要求用户在下次遇到这些问题时与我们联系。他确实联系了我们,我们得以与他进行了一次会面,并亲眼看到了这个问题。

不仅是事件,他在应用程序中被识别为其他人。他可以访问其他人应该可以访问的所有内容。那时我们意识到我们遇到了一个 session 混淆问题。

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

最佳答案

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

问题原来是 ASP.NET 的页面缓存机制——在我们的例子中是 <%@ OutputCache。尤其是标签。

我们曾经使用过一条线<%@ OutputCache NoStore="true" Duration="1" %>这基本上意味着如果两个用户在 1 秒内访问相同的页面,他们将看到相同的页面(包括另一个用户的登录用户名)。因此,如果他们刷新所述页面,他们就会得到正确的信息。

在我们的例子中,将所述行更改为<%@ OutputCache NoStore="true" Duration="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 session 越界/混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5574388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com