重定向页面后会话丢失

时间:2020-08-26 02:49:23

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

为描述该应用程序,它具有一个默认页面,该页面将在其中从请求标头检查用户角色,然后将用户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测试

让我知道是否需要更多信息。急需帮助!

2 个答案:

答案 0 :(得分:0)

由于AWS在服务器场上? 然后,过程中的会话将变得非常困难且有问题。那些庞大的云系统将多次假冒您的Web服务器-对下一页的来龙去脉。如果页面跨IIS服务器的不同实例提供?

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

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

由于您使用AWS且对虚拟机的运行几​​乎没有控制,并且其幕后的“结构”控制器可能会出现故障安全性,并且冗余问题正在运行服务器的多个副本,因此此建议的确更有保证。因此,采用基于SQL的会话管理。

答案 1 :(得分:-1)

我认为您需要使用下面的代码行。

HttpContext.Current.Session["myvariable"]

希望这对您有所帮助。