• ASPNET内置身份认证,用户身份串门


    我最近在一个系统中采用了ASPNET2.0内置的安全认证架构,测试时很正常,项目上线后发现一个严重的问题,就是A用户登录以后,在浏览过程中,有时候莫名奇妙的变成了B用户,显示的是B用户的信息,刷新一下,又变回A了,出现的次数,还是比较频繁的。麻烦帮我看看是什么原因?

    下面把我的主要程序代码列一下,麻烦您看一下:
    Web.config
      <connectionStrings>
        <add name="Evaluation" connectionString="Data Source=.;Initial Catalog=Evaluation;User ID=sa;Password=" providerName="System.Data.SqlClient"/>
      </connectionStrings>
      <appSettings>
          <add key="Application" value="Evaluation" />
      </appSettings>
      <system.web>
        <httpRuntime enableKernelOutputCache="false" maxRequestLength="1024"/>
        <authentication mode="Forms">
          <forms name="evaluation.lj.com" loginUrl="~/Login.aspx" protection="All" domain=".lj.com"/>
        </authentication>
        <machineKey

    validationKey="282487E295028E59B8F411ACB689CCD6F39DDD21E6055A3EE480424315994760ADF21B580D8587DB675FA02F79167413044E25309CCCDB647174D5B3D0DD9141"

    decryptionKey="8B6697227CBCA902B1A0925D40FAA00B353F2DF4359D2099" validation="SHA1"/>
        <membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
          <providers>
            <clear/>
            <add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="Evaluation" applicationName="Evaluation"

    enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" passwordFormat="Hashed"

    minRequiredPasswordLength="3" minRequiredNonalphanumericCharacters="0"/>
          </providers>
        </membership>
        <roleManager enabled="true" cacheRolesInCookie="true" cookieName=".ASPROLES" defaultProvider="SqlProvider">
          <providers>
            <add connectionStringName="Evaluation" applicationName="Evaluation" name="SqlProvider" type="System.Web.Security.SqlRoleProvider"/>
          </providers>
        </roleManager>
        <anonymousIdentification enabled="true"/>

    说明,
    1、其实是有两个项目,采用同样的machineKey设置来实现单点登录;
    2、虽然设置了forms的name,但是因为在局域网运行,实际站点没有域名,是IP地址;


    login.aspx

    if (Membership.ValidateUser(username, password))
    {
                FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket(1, username, DateTime.Now, DateTime.Now.AddMinutes(240), true, "",

    FormsAuthentication.FormsCookiePath);
                string HashTicket = FormsAuthentication.Encrypt(Ticket);
                HttpCookie UserCookie = new HttpCookie(FormsAuthentication.FormsCookieName, HashTicket);
                if (Ticket.IsPersistent)
                {
                    UserCookie.Expires = Ticket.Expiration;
                }
                //生成Cookie
                Response.Cookies.Add(UserCookie); //输出Cookie
    }


    在网上找到一篇文章,好像和我的情况有些类似,
    http://www.cnblogs.com/niuniu502/archive/2008/04/01/1132287.html
    但是我的登录界面不是ajax的,包含到iframe中,也没有解决问题;
    微软的文章
    http://support.microsoft.com/kb/917072
    正象第一篇文章作者提到的那样,“实际上KernelOutputCache被禁用后,COOKIES依然会被分发到不同的用户主机上,也就是说所谓的MS的解决方案对偶一点用页没”。

  • 相关阅读:
    Redis
    IDEA编码相关,解决yml编码错误导致的 java.nio.charset.MalformedInputException: Input length = 1
    文件上传和下载
    SpringBoot+Mybatis+Postman实现增删改查
    多态与反射
    正则表达式
    原码、反码、补码的用法和理解
    @Conditional & @Profile SpringBoot中自动化配置条件注解。
    Spring Boot 中的 Starter
    第一个项目~千寻在线水果商城
  • 原文地址:https://www.cnblogs.com/soonssa/p/1354338.html
Copyright © 2020-2023  润新知