我有一个 In-Proc session 状态的生产问题。
我们的应用程序基于 MVC 3 .NET 框架,并集成到我们运行 Sitecore CMS 的站点中。
我们的用户在整个应用程序流程中随机遇到“未将对象引用设置为对象的实例”。
经过大量的日志记录和跟踪,我们可以得出结论,这是由于 session 对象返回 null 引起的。
以下是有关我们发现的内容和我们所知道的内容的一些详细信息。
正确进入应用程序的方式。
旁注:由于我们的 Sitecore CMS,我们必须使用 In-Proc session 状态。所以改变设计不是一种选择。
我有一个理论,它可能与 session 锁定或并发访问尝试损坏有关。
我们在应用程序中经常看到这个问题发生的几个地方是当用户被 javascript (windows.location) 重定向时。
在进行异步 ajax 调用的区域。
我们在这方面摸索了一段时间,我想知道是否有人对可能的问题有任何见解或理论?
谢谢
补充说明:
@Mystere && @H27Studio,所以我还发现了一些与 sessionID 或 session reset 问题有关的东西。在某些情况下,我们发现在页面重定向上,它触发了对该方法的两次重复的 GETS 调用,第一次调用缺少 sessionID 并随机重定向到其中一个服务器(这是因为来自负载均衡器的服务器持久 session 是根据客户端 IP、sessionID 和其他 header 信息创建唯一的 session 以将客户端保留在一台服务器上)。当我们的重定向页面使用 window.location 时,每次在流程中都会发生这种情况。
如果坏的,没有 sessionID 调用命中同一服务器,这将导致客户端的“未设置对象引用..”问题。 (这可能是因为没有 sessionID 的第一个错误调用导致应用程序创建一个新 session ,该 session 覆盖原始 session 的对象)因此,即使在将正确的 sessionID 传递给应用程序的第二个调用中,我们也会发现 session 对象包含 null .
所以我相信清除 session 对象的重复调用存在问题,它不确定为什么或导致它开始的原因。
任何人都有这方面的线索?谢谢
更新:
我们计划采取这些步骤,希望能解决这个问题。
一旦我们将其部署到生产中,就会发布更改的效果。
感谢所有的评论。
最佳答案
经过几个月的搜索和调试,我想我们终于得出了结论。 Sitecore Analytics Robots session 超时似乎存在错误。我们首先注意到,每当随机 session 丢失是由于 session 过早超时,然后我们注意到这些 session 被设置为 1 分钟超时而不是 120 分钟。
在搜索所有配置文件后,我们注意到 Sitecore Analytic.Robots.SessionTimeout 是唯一设置为 1 分钟的超时值。
通过增加这个值,它解决了我们的 session 超时问题。
所以根本问题是 Sitecore Analytics 错误地将某些访问者 session 识别为机器人 session 并将其超时重新分配为 1 分钟。这可能是一个要报告的错误。
更新:
Sitecore 的回应:
Sitecore CMS 旨在与 ASP.NET WebForms 技术一起使用。在使用 Web 表单时,机器人检测依赖于页面中的控件。很自然,您不能在 ASP.NET MVC 应用程序中使用它,但是有一个简单的解决方案 - 将以下代码放入元素中:
<%
if (Context.Diagnostics.Tracing || Context.Diagnostics.Profiling)
{
Response.Write("<!-- Visitor identification is disabled because debugging is active. -->");
}
else if (Tracker.IsActive && (Tracker.Visitor.VisitorClassification == 925))
{
Response.Write("<link href=\"/layouts/System/VisitorIdentification.aspx\" rel=\"stylesheet\" type=\"text/css\" />");
}
%>
关于.net - MVC3 .NET session 随机丢失 session 值并返回为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9010900/