简短描述:IIS 服务器变量“HTTP_COOKIE”的到期时间似乎不受任何超时变量的控制,我想知道是什么原因造成的。我已经尝试修改我可以在 IIS 中看到的所有超时/到期控制值,并且在大约 20-30 分钟内没有任何改变。
详情:
我们有一个带有 C++ 后端的应用程序,它使用 IIS 服务器变量“HTTP_COOKIE”来存储状态数据,最重要的是该用户当前会话的会话 ID(GUID,用于问题的其余部分)。要求任何用户只能登录一次,而 GUID 是用于强制执行此操作的数据之一 - 每次用户登录时,都会刷新 GUID。每次用户完成一项操作时,都会根据最近为该用户创建的 GUID 检查本地存储在选项卡 sessionStorage 中的 GUID(即,用户首次登录该选项卡时的值)。如果它们不匹配,则用户将被踢出该选项卡上的应用程序。
现在,问题在于有两种情况会刷新 GUID:当用户登录时,以及当应用程序无法在其内存中找到现有的 GUID 或 HTTP_COOKIE 字符串时。案例 1 很好——这就是我们想要的。情况 2 很烦人,因为 IIS 设置中似乎有一些东西导致 HTTP_COOKIE 在 20-30 分钟后被清除(我还没有确定它到底有多长)。我们看了看,我们发现很多超时都可能导致这种情况,但是将每个超时修改为 1 分钟,重置 IIS 并再次尝试对超时没有任何影响:
- 站点=>默认网站=>会话状态=>Cookie 设置=>超时
- 站点=>默认网站=>ASP=>会话属性=>超时
- 站点=>默认网站=>Allstate 应用程序=>ASP=>会话属性=>超时
唯一有所作为的是:
- 应用程序池 => 高级设置 => 进程模型 => 空闲超时
但这是因为它在另一个超时之前启动并重置所有内容,而不是它是导致我们想要删除的那个的原因。在我们的系统中,此超时通常被禁用(根据 MSDN 指南设置为 0 分钟)。
我已经浏览了我能想到的所有内容 - 这绝对是一个 IIS 问题,因为无论是否过期,服务器端代码都在执行完全相同的任务,唯一的区别是 HTTP_COOKIE 字符串在上述空闲时间之后消失了,因此它会生成一个新的 GUID,因为它找不到现有的 GUID。事件日志中没有错误表明某些内容已用完空间或以其他方式失败导致重置。
我要问的是是否有人知道其他可以控制它的东西,以及可以在哪里禁用/修改为更大的值。如果您知道这是什么并且知道它是不可能绕过的,那么知道这也是有用的。如果是这种情况,如果有人对存储用户会话的 GUID 的更好方法提出建议,他们也将不胜感激!
提前致谢。
PS 如果涉及到系统的完全重写,我并不是在寻找更好的方法来处理这个问题——现有的系统过于复杂,但应用程序已经过时(约 15 年),并且包含了很多我们认为过时的方法。我没有得到资源来整理,所以我唯一的选择就是按原样使用系统。