[ASP.NET] Session 遗失 / Session Timeout / Session 设定

摘要:[ASP.NET] Session 遗失 / Session Timeout / Session 设定


前言


  最近使用者常常反应 Session 会莫名其妙的 Timeout,记得已经设定 Timeout 时间为 60 分钟了怎么还会这么容易遗失,查了一下发现针对 Session 有以下模式设定:

  • InProc : 默认值,此模式会将工作阶段状态存放在 Web服务器的内存中。
  • StateServer : 此模式会将工作阶段状态保存在称为 ASP.NET 状态服务的个别处理序中。这样可以确保工作阶段状态在 Web应用程序重新启动时保留下来,并且让 Web伺服数组中的多个 Web服务器都能够使用工作阶段状态。
  • SQLServer : 此模式会将工作阶段状态保存在 SQL Server数据库中。这样可以确保工作阶段状态在 Web应用程序重新启动时保留下来,并且让 Web伺服数组中的多个 Web服务器都能够使用工作阶段状态。
  • Custom : 此模式可让您指定自订保存提供者 (Provider)。
  • Off : 此模式会停用工作阶段状态。

  之前默认是 InProc,所以在 Server 上更新程序或执行某些动作时会导致 Session 遗失,所以现在改用 StateServer 模式。

范例


  首先在 Web.Config 设定里加入 SessionState 的设定字符串:


  加完这个字符串时候如果马上去执行网站,会出现以下错误:

无法将工作阶段状态要求送至工作阶段状态服务器。请确定 ASP.NET 状态服务已经启动且用户端与服务器的通讯端口都相同。如果服务器是在远端电脑上,请检查 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesaspnet_stateParametersAllowRemoteConnection 的值,确定它是否接受远端要求。如果服务器是在本机电脑上,而且前述登录值不存在或设定为 0,状态服务器连接字符串就必须使用 'localhost' 或 '127.0.0.1' 做为服务器名称。

  原因是因为尚未修改系统注册表与启动 ASP.NET State Service 服务,接下来先修改注册表:

  开始 > 执行 > 输入 regedit > 开启登入编辑程序 在路径 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesaspnet_stateParameters 下找到 AllowRemoteConnection 将数值数据更改为 1


再来开启 ASP.NET State Service 服务,服务 >   ASP.NET State Service > 启动。

都设定完成后,再去执行网站即可。

参考数据


http://blog.xuite.net/sugopili/computerblog/20910396




以上文章叙述如有错误及观念不正确,请不吝啬指教
如有侵权内容也请您与我反应~谢谢您 :)