【问题标题】:Session lost after redirect page重定向页面后会话丢失
【发布时间】:2020-12-14 18:56:19
【问题描述】:

为了描述应用程序,它有一个默认页面,它将从请求标头中检查用户角色,然后将用户 ID 分配到会话中并重定向到相应的页面。在其他每个页面中,它会检查会话是否有值,如果没有,则重定向默认页面。

这已经在我的开发环境中进行了测试,并且可以正常工作。但是,当我在 IIS(AWS EC2 环境)中托管它时。它开始表现得很奇怪。如果应用程序的绑定坚持默认。我可以在服务器中使用 http://localhost:26943/ 毫无问题地浏览它。

default bindings

但是,当我将绑定更改为主机名并使用http://testing.com/ 浏览时,我发现包含用户 ID 的会话为空。

hostname bindings

我尝试了几种方法,包括:

  1. 在 Global.asax 中添加 Session["init"] = 0
  2. 在 web.config 中更改 cookieless=true
  3. 将 sessionState 的模式更改为“StateServer”
  4. 重定向到“~/page.aspx”而不是“page.aspx”

仅更改无 cookie 的方法对我有用,但它会在 URL 中显示会话 ID,我怀疑这是正确的方法。

应用详情:

  • .NetFramework 4.8
  • 使用 WCF 服务
  • 当前会话状态信息为 sessionState mode="InProc" cookieless="false" timeout="60"
  • 配置 c:\Windows\System32\Drivers\etc\hosts 添加 127.0.0.1 testing.com
  • 使用 IE 11 测试

【问题讨论】:

  • testing.com 属于你吗?
  • 你使用 Response.redirect() 重定向吗? Response.redirect 可能会终止线程并导致会话丢失。在其中添加一个 false 将避免此问题,例如:Response.redirect(“another page”, false)。另一个建议是使用其他浏览器而不是 IE。
  • 嗨@JalpaPanchal,已经用 Chrome 和 Firefox 进行了测试,它们似乎工作正常。 windows server 中的 IE 会不会有这个问题?

标签: c# asp.net amazon-web-services iis


【解决方案1】:

因为 AWS 在服务器场上? 然后进程内会话将非常不稳定和有问题。那些庞大的云系统将多次从您的网络服务器中运行出来——对于下一页将来自何处的疯狂猜测。页面是否跨 IIS 服务器的不同实例提供服务?

您将丢失会话值。如前所述,即使是一些未处理的代码错误也会导致应用程序池重新设置。所有这些问题加起来很容易和频繁地丢失会话。

我建议您采用基于 SQL Server 的会话管理。这应该消除可能导致 session() 重置的无数问题。我喜欢进程内。基于内存的速度很快,而且由于您没有编写下一个 Facebook,因此典型的服务器负载当然几乎没有(再次强调,这有利于使用进程内会话)。但是,既然你有服务器场,一些应用程序错误会成为问题吗?采用基于 SQL Server 的会话,如果不是 100% 的话,99 次 session() 会重新设置并且丢失会消失。

这个建议更有根据,因为您使用 AWS 并且您几乎无法控制它们运行的​​虚拟机,并且它们的幕后“结构”控制器可能会因故障安全和冗余问题而运行您的服务器的多个副本。所以,采用基于 SQL 的会话管理。

【讨论】:

    【解决方案2】:
    HttpContext.Current.Session["myvariable"]
    

    【讨论】:

    • 您好,请问您的意思是在 Global.asax 的 Session_start 中添加它,还是在我尝试访问会话时使用它?
    • 请添加此代码的上下文。
    猜你喜欢
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    • 2014-03-31
    相关资源
    最近更新 更多