ASP.net会话cookie丢失或删除

前端之家收集整理的这篇文章主要介绍了ASP.net会话cookie丢失或删除前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个ASP.NET 2.0站点,在会话中存储用户的ID以表明他们已登录.在某些情况下,用户似乎没有保持登录状态.我一直在监视Fiddler中的流量,以及一些细节我发现:

>在运行IE7时运行IE7和项目经理的笔记本电脑时,我的笔记本电脑上的问题是100%可重复的.在运行FF的当前笔记本电脑上运行IE7或任何这些笔记本电脑时,问题都不会发生.
>问题仅发生在生产中 – 而不是在开发,内部分段或客户端分段上.生产是唯一的负载平衡环境,但上面提到的可重复性使我怀疑负载平衡是一个因素.
>当设置Session(“ID”)= 1的页面将响应发送回客户端时,我可以在所有情况下看到“Set-Cookie”标题,即创建ASP.Net_Session_Id cookie(并且它是HttpOnly).
>对服务器的后续请求将在未显示问题的计算机的标头中发送该cookie,但不在计算机上发送,因此要么删除cookie,要么忽略“Set-Cookie”标头.
>登录的方式如下:www.DomainX.com上的页面有一个iframe. iframe的来源是login.DomainY.com上的一个页面. login.DomainY.com提供的各种页面引导用户完成登录/注册过程. login.DomainY.com的最后一步是重定向到www.DomainX.com上的页面,包括查询字符串中的用户ID. www.DomainX.com上的此页面通常将ID存储在会话中,然后运行一些JS以将顶级文档重定向到新页面,从而将用户从iframe中取出.这是一个已经工作了几年的过程,具有DomainX.com的几个值.这里可能有所不同的一点是,在这种情况下,JS只是破坏了iframe和一些包含div的东西.
>我发现问题发生的情况与不存在问题的情况之间的另一个区别在于Google Analytics(分析)Cookie. login.DomainY.com/FinalStep.aspx将其重定向到iframe内的www.DomainX.com/SaveTheID.aspx有所不同.如果没有出现此问题,SaveTheID.aspx请求会包含各种Google Analytics Cookie(__ utma,__ utmz等).当问题确实发生时,此请求不包括所有GA cookie(它缺少__utma,__ utmz和__utmb).
>生产是login.DomainY.com在SSL下运行的唯一环境,所以我认为这可能是相关的.但我们暂时设置login.DomainY.com的暂存副本以使用SSL,但这没有任何效果.

什么可能导致这个?

编辑:生产环境包含www.DomainX.com和DomainX.com的域.还存在另一个已知问题,即没有为这两个域设置cookie.这可能是相关的,但是在修复产生之前我无法进行测试.

解决方法

您将需要查看会话状态提供程序,以查看它是否可以在.net应用程序的两个服务器/实例之间工作.如果它们被设置为例如inProc,那么你肯定会遇到这个问题,因为每个会话都将绑定到创建它的线程.相反,您希望将其抽象为两台机器都可以访问的asp.net状态服务,或者甚至更好地使用分布式缓存解决方案,例如Microsoft Velocity项目,它将在两台机器上分配会话以防万一发生故障.

处理此问题的其他一些方法是在负载均衡器上使用粘性会话(不推荐)或转移到无cookie的会话,这会起作用但可能会导致代码中的一些麻烦.

在我们的业务中,我们有一个主服务器和辅助服务器,后面有分布式缓存,这样如果一台机器发生故障,另一台机器可以接管.同样的原则适用于负载平衡,一旦您开始在应用程序池中拥有多台计算机或甚至多个实例,您就必须为此进行编码.

如果您使用Velocity进行会话,请确保您选择用于存储会话的缓存是不可删除的.

原文链接:https://www.f2er.com/aspnet/247198.html

猜你在找的asp.Net相关文章