非常にユニークな状況を見てきました。いくつかの入力が必要です。
背景: ELB を使用する ec2 インスタンスに tomcat サーバーがあります。私たちのアプリケーションは、ロードバランサーがセッションを追跡したくないため、セッションを使用しない春のアプリケーションです。ユーザーを識別するためにCookieを使用しています。Memcache を使用して、いくつかの基本的なセッション情報を保存します。ほとんどの場合、すべてがうまく機能します。
問題: 一部のリモート ケースでは、0.01% の時間 (分析) で、ユーザー間で応答が混乱しています。そして、ユーザーは通常、同じ clientIP から来ています。これは、私たちのアプリケーションが学校で広く使用されているためです。クライアント Cookie と、サーブレットで読み取った Cookie が一致します。アプリケーションが DB で間違った情報を検索していないことは確かです。しかし、レンダリングされている応答 (ビュー) は別のユーザー向けです。両方のユーザーが同時にログインしていることがわかります。
これは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 は一貫性があり正確です。