会议状态失去价值

时间:2011-02-04 16:53:41

标签: c# asp.net session

我有一个asp.net应用程序c#,当用户登录时使用会话状态来存储变量。这是他们的登录名,并且在整个用户区域中广泛使用。问题是会话不断丢失某些计算机上的信息。我真的不太了解会话状态,我想知道为什么会发生这种情况。一个例子。当用户在网格上进行不同的选择时,大约2分钟后,在屏幕上显示会话状态变量的标签为空,当他们想要添加记录时,由于数据库需要用户名加盖记录而导致人员出现问题一个记录。

总结一下。什么会导致会话状态变量在几分钟后丢失其值而不是在所有计算机上丢失。 (我的计算机上没有问题只在客户端机器上 - 通常不是这样)

更多信息;

我在服务器端代码中使用会话,即

  session["username"] = username.Text;

而且我拥有的托管是一个共享托管环境,这意味着我与iis设置很少(相当便宜的工作,我害怕)将尝试Web配置更改和报告。谢谢你的所有答案。

5 个答案:

答案 0 :(得分:4)

听起来(虽然我可能错了)你有多个IIS服务器,每个服务器都维护状态。如果您正在进行负载平衡,则无法保证您将在同一服务器上运行两次。因此,虽然服务器A具有您正在寻找的状态信息,但服务器B不会。

你负载均衡吗?如果是这样,您可能希望使用SQL Server进行状态管理。

答案 1 :(得分:4)

如果我了解您的问题,您必须将会话数据存储在进程中。如果您有SQLServer数据库,则可以使用“状态服务器模式”或“SQL Server模式”。

您可以在此处找到http://msdn.microsoft.com/en-us/library/ms178586.aspx

的使用方法

否则你可以构建一个“自定义会话状态存储提供程序”,但我认为这种方式有点复杂。

答案 2 :(得分:2)

也许会话在2分钟后超时?该值应位于web.config中,如

<sessionState timeout="40"></sessionState>

或者您可以在global.asax中编写会话超时处理程序并在其中放置断点以查看是否是原因。

答案 3 :(得分:0)

存储会话状态的方法有多种,最常见的两种方法是客户端cookie和服务器端会话。 (我们可以进入会话状态服务器和数据库存储会话,但我宁愿不这样做)

当你说其他用户正在使用issuse时,但你并不认为他们的会话可能会到期。很难说出用户一直在做什么,但是一个好的测试就是登录,让它静置一两个小时,然后回到它看看你是否还有会话状态。您可以在IIS中控制会话超时,也可以在web.config中设置。即使在大多数情况下配置“应该”覆盖iis设置,它在这些情况下也不能很好地工作,你最好更新IIS和Web配置会话状态到期。

答案 4 :(得分:-1)

我认为您大量使用会话来存储值...仅在需要时使用它。

在这里,当您遇到频繁出现的问题时,请检查IIS并增加网站的application pool,因为您的网站将使用更多内存,然后是allowed应用程序池, IIS recycles the sessionsession values are LOST