简短描述:IIS服务器变量“HTTP_COOKIE”在一个似乎没有被任何超时变量控制的时间到期,我想知道是什么导致它。我已经尝试修改我在IIS中可以看到的所有超时/到期控制值,并且没有任何改变大约20-30分钟。
详细:
我们有一个带有C ++后端的应用程序,它使用IIS服务器变量“HTTP_COOKIE”来存储状态数据,最重要的是该用户当前会话的会话ID(GUID,用于问题的其余部分)。要求任何用户只能登录一次,并且GUID是用于强制执行此操作的数据之一 - 每次用户登录时,GUID都会刷新。每次用户完成操作时,都会根据最近为该用户创建的GUID检查本地存储在选项卡sessionStorage中的GUID(即,当用户首次登录该选项卡时具有的值)。如果它们不匹配,则用户将在该选项卡上启动应用程序。
现在,问题在于有两种情况会刷新GUID:用户登录时,以及应用程序无法在其内存或HTTP_COOKIE字符串中查找现有GUID的情况。案例1很好 - 这就是我们想要的。案例2很烦人,因为在IIS设置中似乎有一些东西导致HTTP_COOKIE在20-30分钟后被清除(我没有确切地确定它有多长)。我们看了一下,我们发现很多超时可能造成这种情况,但是依次将每个超时修改为1分钟,重置IIS并再次尝试对超时没有任何影响:
唯一一个 有所作为的是:
但这是因为它在之前在中踢了另一个超时并重置了所有内容,而不是导致我们想要删除的内容。在我们的系统中,此超时通常被禁用(根据MSDN指南设置为0分钟)。
我已经浏览了我能想到的一切 - 这绝对是一个IIS问题,因为服务器端代码执行完全相同的任务,无论它是否到期,唯一的区别是HTTP_COOKIE字符串在上面之后消失了空闲时间,因此它生成一个新的GUID,因为它找不到现有的GUID。事件日志中没有错误,暗示某些内容已用完空间或导致重置失败。
我要问的是,是否有人知道可以控制此事的任何其他事情,以及可以将其禁用/修改为更大值的地方。如果你知道这是什么,并且知道绕过它是不可能的,那么知道也是有用的。如果是这种情况,如果有人建议更好地存储用户会话的GUID,他们也将不胜感激!
提前致谢。
P.S。我不是在寻找一种更好的方法来解决这个问题,如果它涉及到系统的完全重写 - 现有的系统不必要地复杂,但是应用程序很旧(大约15年)并且包含许多古老的方法,我们是没有给予资源整理,所以我唯一的选择就是按原样使用系统。
答案 0 :(得分:1)
HTTP_COOKIE只是通过请求/响应标头传递的连接字符串,用于存储在客户端上的该域的所有有效 cookie。您基本上受到会话ID的默认超时的影响。只需创建自己的会话标识符(例如,生成存储在数据库表中的GUID),并让客户端将其存储为具有不同到期日期的cookie。使用每个有效的用户交互更新到期日期以扩展会话。问题解决了。
答案 1 :(得分:0)
您确定会话Cookie过期且问题在所有浏览器中都是一致的吗?
我遇到了一些问题,其中应用程序有一些致命错误或服务器上的内存已满且& AppPool崩溃,因此会话重置本身。请在此期间使用Perfmon监控服务器日志,可能存在致命错误,应用程序错误,IIS错误或系统错误。
我长期以来一直在努力奋斗,因为有时候AppPool崩溃了因此,使用该AppPool托管在IIS上的所有应用程序也会重置&因此会议被破坏了。