Ada*_*uer 55 asp.net iis session
我有一个ASP.net应用程序,其中用户无法成功完成某些操作,原因,我假设,只能与丢失其会话相关(这是我维护其当前用户信息的位置,以及如何确定是否他们登录了)
我不知道他们为什么会失去他们的会话,所以我的第一个问题是:
什么(一般)会导致用户在ASP.net中丢失会话?
因为我不知道用户何时会丢失会话并且无法自行复制:
如何跟踪用户丢失会话的时间
下面是我的sessionState配置供参考
<sessionState
mode="InProc"
cookieless="false"
cookieName="My.Site.Com"
timeout="480"/>
Run Code Online (Sandbox Code Playgroud)
Ada*_*lls 103
许多事情都会导致会话状态神秘地消失.
-
如果您使用的是IIS 7或7.5,请查看以下内容:
如果您使用的是IIS 6,则应用相同的设置(大多数情况下,但使用不同的方式)但是让他们记录回收更加困难.以下是获取IIS 6以记录AppPool回收事件的方法的链接:
-
如果要更新Web应用程序上的文件,则应该会丢失所有会话.这只是野兽的本质.但是,您可能不会期望它多次发生.如果您更新了15个或更多文件(aspx,dll等),则有可能在一段时间内重新启动多次,因为访问该站点的用户会重新编译这些页面.看到这两个链接:
http://support.microsoft.com/kb/319947
将numCompilesBeforeAppRestart设置为更高的数字(或手动弹回AppPool)将消除此问题.
-
您始终可以处理Application_SessionStart和Application_SessionEnd,以便在创建或结束会话时收到通知.HttpSessionState类还具有IsNewSession属性,您可以检查任何页面请求以确定是否为活动用户创建了新会话.
-
最后,如果在您的情况下可行,我已经使用SQL Server会话模式取得了很好的成功.如果您在其中存储大量数据(不是每个请求加载并从SQL Server保存全部数据),则不建议使用它,如果您在其中放置自定义对象,则可能会很麻烦(因为它们必须是可序列化的) ),但它帮助我在共享主机方案中,我无法配置我的AppPool不回收几个小时.在我的情况下,我存储了有限的信息,并没有不良的性能影响.除此之外,现有用户将默认重用其SessionID这一事实,我的用户从未注意到他们的内存会话被AppPool回收器丢弃,因为他们的所有状态都存储在SQL Server中.
小智 5
我在 ASP.NET 4.0 中遇到了一种情况,我的会话将在每个页面请求上重置(并且我的 SESSION_START 代码将在每个页面请求上运行)。这不会发生在每个会话的每个用户身上,但它通常会发生,当它发生时,它会发生在每个页面请求上。
我的 web.config sessionState 标记具有与上面提到的相同的设置。
cookieless="false"
Run Code Online (Sandbox Code Playgroud)
当我将其更改为以下...
cookieless="UseCookies"
Run Code Online (Sandbox Code Playgroud)
......问题似乎消失了。显然 true|false 是 ASP.NET 1 的旧选项。从 ASP.Net 2.0 开始,枚举选项开始可用。我猜这些选项已被弃用。“false”值过去从未出现过问题 - 我只在 ASP.NET 4.0 中注意到。我不知道 4.0 中是否发生了一些不再正确支持它的更改。
另外,我不久前才发现这一点。由于之前问题是间歇性的,我想我仍然可以遇到它,但到目前为止它正在使用这个新设置。
| 归档时间: |
|
| 查看次数: |
107731 次 |
| 最近记录: |