一直看到一个非常独特的情况。需要一些输入。
背景:我们在带有ELB的ec2实例上有tomcat服务器。我们的应用程序是一个不使用会话的spring应用程序,因为我们不希望负载均衡器跟踪会话。我们使用cookie来识别用户。我们使用Memcache存储一些基本的会话信息。在大多数情况下,一切都很好。
问题:在一些偏远的情况下,0.01%的时间(我们分析过),用户之间的反应变得混乱。用户通常来自同一个客户端IP。我们知道这一点,因为我们的申请被学校广泛使用。客户端cookie和我们在servlet中读取的cookie匹配。我们很肯定我们的应用程序没有查找数据库中的错误信息。但是渲染的响应(视图)是针对另一个用户的。我们知道两个用户都在同一时间登录。
这与Tomcat有关吗?还是网络相关?
控制器代码:
@RequestMapping("/kids")
public ModelAndView kids(HttpServletRequest request, HttpServletResponse response) {
StudentUserSession studentUserSession = BaseController.getStudentUserSession(request);
if(studentUserSession != null) {
ModelAndView mv = new ModelAndView("kids");
mv.addObject("studentUserSession", studentUserSession);
return mv;
} else {
return new ModelAndView("redirect:/signin");
}
}
public ModelAndView kids(HttpServletRequest request, HttpServletResponse response) {
StudentUserSession studentUserSession = BaseController.getStudentUserSession(request);
if(studentUserSession != null) {
ModelAndView mv = new ModelAndView("kids");
mv.addObject("studentUserSession", studentUserSession);
return mv;
} else {
return new ModelAndView("redirect:/signin");
}
}
JSP代码:
var acookie = readCookie("sp_utkn");
var studentId = ${studentUserSession.studentId};
$.getJSON("/getStudentProfile", function(data){
var sId = -1;
$.each(data, function (key, value) {
if(key == 'studentId'){
sId = value;
}
});
dojo.xhrGet({
url:"/logStudentEvent?cookie=" + acookie+"&stuId="+studentId+"&aId="+sId+"&ref="+otherInfo.join(','),
});
});
JSON Get Call获取相同的对象。 aId与cookie匹配,但studentId不匹配。页面上的其他数据也适用于其他用户。但是cookie一致且准确。