我正在尝试将经典 ASP 应用程序迁移到 Windows 2008 R2 服务器上。
应用程序功能运行良好,但我遇到了会话问题。
该应用程序将登录的用户信息保存在会话中,并且我经常被淘汰,好像会话已过期。
在调试时,我发现会话没有过期,而是一个浏览器正在使用 2-3 个不同的会话 ID。
我在应用程序的各个页面上输出 Response.Write(Session.SessionID),我可以坐在那里一遍又一遍地点击刷新,观察这 2-3 个 SessionID 之间随机变化的数字。
会话仍然有效,因为当我刷新并获取我在页面下登录的会话 ID 时(因为安全检查成功),当我获得其他会话 ID 之一时,我得到“你没有登录在,您需要登录”消息。
如果我关闭并重新打开浏览器,同样的故事只是一组 ID 是新的。
来自多台计算机的 IE8、Firefox 和 Chrome 会发生这种情况。
我尝试过的事情:
- AppPool 设置为无托管代码和经典
- 输出缓存设置 .asp 从不缓存
- 启用和禁用 ASP 会话属性并确认它影响页面(在禁用时尝试读取 Session.SessionID 时出错)
我尝试过的事情以防万一但与 ASP 会话无关:
- 禁用压缩
- 更改了 ASP.Net 会话状态属性(InProc、StateServer、SQLServer、Cookie、URI 等) -
检查应用程序池的网络花园设置。如果它大于 1,则站点将在 1 个以上的工作进程中运行。Classic ASP 中的会话状态取决于进程中内存的单个实例。很少需要将网络花园设置为 1 以外的任何值。
具有循环负载平衡的网络农场会遇到同样的问题,但您的帖子并不建议您这样做。