asp.net - session 在 asp.net 网站上混在一起

标签 asp.net session authentication forms-authentication

我正在分析一个由几个月前离开公司的同事创建的旧 asp.net 站点的问题。

问题是我们有几次经历过两个用户 session 混合在一​​起,例如,如果两个用户登录,一个用户会看到其他用户的数据。由于这种情况很少发生(大约一个月一次),因此很难弄清楚哪里出了问题。

我现在已经通过他的代码进行身份验证,它是这样的:

  • 用户在公共(public)页面输入用户名/密码并按提交
  • Page_Load在 Masterpage 上,代码在 mySql 数据库中检查用户名/密码是否有效、未过期等,如果正常则返回唯一的用户 ID
  • 然后该页面将登录页面保存在 session 中,如下所示(用于以后注销):HttpContext.Current.Session(Consts.CCookieName_LoginUrl) = Request.RawUrl
  • 然后用户 ID 保存如下:FormsAuthentication.SetAuthCookie(userid, False)
  • 然后重定向到安全区域:Context.Response.Redirect(secureurl, False)
  • Page_Init安全区域母版页的用户 ID 由以下人员读取:userid = Context.User.Identity.Name
  • 根据用户 ID
  • 加载用户数据
  • 用户导航安全区域,即。重复步骤 6 - 7
  • 用户突然看到另一个用户数据

  • 我对出了什么问题有一些想法,但想在修改代码之前有一些输入,所以请任何人?

    最佳答案

    这里很难说。
    您是否配置了表单例份验证?

    这是表单例份验证必须遵循的过程:
    在您的 web.config 中,您设置身份验证系统:

    <authentication mode="Forms">
        <forms loginUrl="Login.aspx" defaultUrl="Home.aspx" timeout="30" slidingExpiration="true" />
    </authentication>
    
    <authorization>
      <deny users="?"/>
    </authorization>
    

    您的登录页面(回发)检查凭据(不是您的母版页)。
    如果用户有效,那么您设置 cookie:

    FormsAuthentication.SetAuthCookie(userid, False)

    并重定向到另一个页面。
    现在,您必须在此处设置您的主体读取 cookie:
    protected void Application_AuthenticateRequest(Object sender, EventArgs e) {
        if (HttpContext.Current.User != null) {
            if (Request.IsAuthenticated == true) {    
                // Debug#1            
                FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(Context.Request.Cookies[FormsAuthentication.FormsCookieName].Value);
                // In this case, ticket.UserData = "Admin"                
                string[] roles = new string[1] { ticket.UserData }; 
                FormsIdentity id = new FormsIdentity(ticket);
                Context.User = new System.Security.Principal.GenericPrincipal(id, roles);
                // Debug#2
            }
        }
    }
    

    显然,我已经简化了,但这是你必须遵循的正确做事的路径。

    关于asp.net - session 在 asp.net 网站上混在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6200172/

    相关文章:

    ASP.NET session 范围 : where can it be accessed from?

    php - Laravel 记住我永远在线

    django - 使用(contrib.auth.models用户)的用户注册页面,但面临“非空约束错误”

    asp.net - 是否可以在 ASP.NET 5 的 Web API 中使用外部身份提供程序?

    asp.net - 如何使用linq仅从日期时间列中获取日期

    php - 如何使用 XMLHttpRequest 传递 php session

    android - 如何在android中向url添加 header 参数并从json url获取值

    asp.net - 是否可以使用 Office 365 API 编辑存储在云中的 Office 文档?

    c# - 获取 ASMX Web 服务上客户端的 IP 地址

    session - 管理不同 tomcat 实例上的 session