asp.net – HTTP_COOKIE IIS服务器变量因未知原因而过期

简短说明: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并再次尝试对超时没有任何影响:

> Sites =>默认网站=>会话状态=> Cookie设置=>超时
> Sites =>默认网站=> ASP =>会话属性=>超时
> Sites =>默认网站=> Allstate application => ASP =>会话属性=>超时

唯一有所作为的是:

>应用程序池=>高级设置=>过程模型=>空闲超时

但这是因为它在其他超时之前开始并重置所有内容,而不是导致我们要删除的内容.在我们的系统中,此超时通常被禁用(根据MSDN指南设置为0分钟).

我已经浏览了我能想到的一切 – 它绝对是一个IIS问题,因为服务器端代码执行完全相同的任务,无论它是否到期,唯一的区别是HTTP_COOKIE字符串在上述空闲时间后消失了,所以它生成一个新的GUID,因为它找不到现有的GUID.事件日志中没有错误暗示某些内容空间不足或导致重置失败.

我要问的是,是否有人知道其他任何可以控制它的东西,以及哪些可以被禁用/修改为更大的值.如果你知道这是什么,并且知道绕过它是不可能的,那么知道也是有用的.如果是这种情况,如果有人建议更好地存储用户会话的GUID,他们也将不胜感激!

提前致谢.

附:我不是在寻找一种更好的方法来解决这个问题,如果它涉及到系统的完全重写 – 现有的系统不必要地复杂,但是应用程序很旧(大约15年)并且包含许多古老的方法,我们是没有给予资源整理,所以我唯一的选择就是按原样使用系统.

最佳答案 HTTP_COOKIE只是通过请求/响应头传递的连接字符串,用于存储在客户端上的该域的所有有效cookie.您基本上受到会话ID的默认超时的影响.只需创建自己的会话标识符(例如,生成存储在数据库表中的GUID),并让客户端将其存储为具有不同到期日期的cookie.使用每个有效的用户交互更新到期日期以扩展会话.问题解决了.

点赞