Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Asp.Net表单身份验证:会话自动更改为其他最近登录的用户会话_C#_Asp.net_Forms Authentication_Iis 8_Asp.net Session - Fatal编程技术网

C# Asp.Net表单身份验证:会话自动更改为其他最近登录的用户会话

C# Asp.Net表单身份验证:会话自动更改为其他最近登录的用户会话,c#,asp.net,forms-authentication,iis-8,asp.net-session,C#,Asp.net,Forms Authentication,Iis 8,Asp.net Session,我的asp.net Web表单应用程序托管在IIS8上,位于intranet,具有表单身份验证。对于单个用户而言,此应用程序运行完全正常。但问题在于不止一个用户。以两位用户为例说明问题 问题在于用户登录应用程序并执行任何导航时。同时,其他用户B登录到应用程序并执行任何导航。现在,如果userA刷新浏览器,那么userA意识到他的会话转换成了UserB会话(loggedin),这也很奇怪。两个用户在不同的机器/系统和位置上。我不知道该怎么称呼这个问题 我认为我的配置/代码中缺少一些要点。我的代码和

我的asp.net Web表单应用程序托管在IIS8上,位于intranet,具有表单身份验证。对于单个用户而言,此应用程序运行完全正常。但问题在于不止一个用户。以两位用户为例说明问题

问题在于用户登录应用程序并执行任何导航时。同时,其他用户B登录到应用程序并执行任何导航。现在,如果userA刷新浏览器,那么userA意识到他的会话转换成了UserB会话(loggedin),这也很奇怪。两个用户在不同的机器/系统和位置上。我不知道该怎么称呼这个问题

我认为我的配置/代码中缺少一些要点。我的代码和配置如下

在C#中,在验证用户凭据后,我使用下面的代码
FormsAuthentication.RedirectFromLoginPage(UserId,false)

在Web.config中

<sessionState mode="InProc" timeout="20"></sessionState>    
<authentication mode="Forms">
  <forms name=".ASPXFORMSAUTH" loginUrl="LogIn.aspx" cookieless="UseCookies" requireSSL="false" path="/" timeout="30" defaultUrl="Welcome.aspx" protection="All"/>
</authentication>
<authorization>
  <deny users="?"/>
</authorization>


请说明我做错了什么或错过了任何重要步骤。

在成功登录后尝试记录
会话ID
,以便验证这些会话是否相同。
此外,在重定向逻辑期间可能会生成相同的身份验证票证。这取决于我们如何控制cookie的生成

  private void cmdLogin_ServerClick(object sender, System.EventArgs e)
{
   if (ValidateUser(txtUserName.Value,txtUserPass.Value) )
   {
      FormsAuthenticationTicket tkt;
      string cookiestr;
      HttpCookie ck;
      tkt = new FormsAuthenticationTicket(1, txtUserName.Value, DateTime.Now, 
DateTime.Now.AddMinutes(30), chkPersistCookie.Checked, "your custom data");
      cookiestr = FormsAuthentication.Encrypt(tkt);
      ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
      if (chkPersistCookie.Checked)
      ck.Expires=tkt.Expiration;
    ck.Path = FormsAuthentication.FormsCookiePath; 
      Response.Cookies.Add(ck);

      string strRedirect;
      strRedirect = Request["ReturnUrl"];
      if (strRedirect==null)
            strRedirect = "default.aspx";
         Response.Redirect(strRedirect, true);
   }
   else
      Response.Redirect("logon.aspx", true);
}
查看此项了解更多详细信息。


如果问题仍然存在,请随时通知我

成功登录后,尝试记录
会话ID
,以验证这些会话是否相同。
此外,在重定向逻辑期间可能会生成相同的身份验证票证。这取决于我们如何控制cookie的生成

  private void cmdLogin_ServerClick(object sender, System.EventArgs e)
{
   if (ValidateUser(txtUserName.Value,txtUserPass.Value) )
   {
      FormsAuthenticationTicket tkt;
      string cookiestr;
      HttpCookie ck;
      tkt = new FormsAuthenticationTicket(1, txtUserName.Value, DateTime.Now, 
DateTime.Now.AddMinutes(30), chkPersistCookie.Checked, "your custom data");
      cookiestr = FormsAuthentication.Encrypt(tkt);
      ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
      if (chkPersistCookie.Checked)
      ck.Expires=tkt.Expiration;
    ck.Path = FormsAuthentication.FormsCookiePath; 
      Response.Cookies.Add(ck);

      string strRedirect;
      strRedirect = Request["ReturnUrl"];
      if (strRedirect==null)
            strRedirect = "default.aspx";
         Response.Redirect(strRedirect, true);
   }
   else
      Response.Redirect("logon.aspx", true);
}
查看此项了解更多详细信息。


如果问题仍然存在,请随时通知我

这让我很感兴趣。我建议您记下用户提供的SessionID cookie值,然后执行刷新操作,查看刷新后cookie值是否发生变化。我以前从未见过类似的情况。我怀疑没有发生会话切换。我不知道,但我猜您使用的是一些全局状态(应用程序范围、具有静态属性的类或类似的),这些状态在用户B登录时更新,然后在用户A执行刷新hie/她的浏览器页面的操作时也会显示。Hi@GaganDeep,刷新ctrl+f5后cookie值没有变化,我签入了chrome->f12>应用程序选项卡。如果没有cookie,则无法劫持更改会话。所以我也认为是一些服务器端代码在为您做这件事。您正在会话变量中存储某些内容。那些是什么。这些都准备好了吗?这让我很感兴趣。我建议您记下用户提供的SessionID cookie值,然后执行刷新操作,查看刷新后cookie值是否发生变化。我以前从未见过类似的情况。我怀疑没有发生会话切换。我不知道,但我猜您使用的是一些全局状态(应用程序范围、具有静态属性的类或类似的),这些状态在用户B登录时更新,然后在用户A执行刷新hie/她的浏览器页面的操作时也会显示。Hi@GaganDeep,刷新ctrl+f5后cookie值没有变化,我签入了chrome->f12>应用程序选项卡。如果没有cookie,则无法劫持更改会话。所以我也认为是一些服务器端代码在为您做这件事。您正在会话变量中存储某些内容。那些是什么。这些是怎么设置的。