1

一直看到一个非常独特的情况。需要一些输入。

背景:我们在带有 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");

    }

}

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 是一致且准确的。

4

0 回答 0