第一次访问login.html,点击SUB1后,ajax调用logincheck.jsp能成功打印session值。
ajax调用返回后后开始调用方法写cookie信息。点击SUB2,ajax调用verfy.jsp也能成功拿到session值。
但是关闭浏览器后重新打开浏览器执行上述操作时在点击SUB1还能拿到session值,点击SUB2后verfy.jsp就得不到session值了,打印的是空!在本机上测不会出现问题,但是在项目部署到服务器后就会出现上述问题了,但只要把login.html改为login.jsp后又不会出现问题了,很诡异啊!!服务器使用了F5负载均衡、nginx、weblogic
-------------------以下是项目的页面精简过后的代码----------------------------login.html<html>
<script type="text/javascript">
function checkUser(){
var url = "logincheck.jsp";
$.ajax({
url:url,
type:"post",
success:loginOkFunc
});
}
function loginOkFunc() {
$.cookie('account','loginaccount',{expires:7});
}
function checkVerfy(){
var url="verfy.jsp";
$.ajax({
url:url,
type:"post",
success:loginVerfyOkFunc
});
}
function loginVerfyOkFunc(){
var s = $.cookie('account');
}
function readAccount(){
$.cookie('account');
}
</script>
</head><body onload="readAccount();">
<form onsubmit="return checkUser();" method="post" name="login" id="login" action="#">
<input type="submit" value="SUB1"/>
</form> <form method="post" name="verfy" onsubmit="return checkVerfy()" action="#">
<input type="submit" value="SUB2"/>
</form>
</body>
</html>logincheck.jsp<%@ page contentType="text/xml; charset=utf-8"%><%
session.setAttribute("name","sessionIsNotFound");
System.out.println(session.getAttribute("name"));
%>verfy.jsp<%@ page contentType="text/xml; charset=utf-8" %><%
System.out.println(session.getAttribute("name"));
%>

解决方案 »

  1.   

    因为html是不会传递session Id之类的信息的
      

  2.   

    不是吧,使用sessionId是存在cookie头里的,使用ajax访问过jsp后,jsp会将返回信息放在cookie头里,下次用ajax会提交这个cookie头的!所以html是有能力保存sessionId信息的,只不过直接第一次访问html不会有sessionId这个概念!
      

  3.   

    打开cookie看看里面有sessionid信息吗?如果没有显示向cookie里面写该属性,cookie里是不会存放该信息的,session之类的信息是服务器端的信息,如果用Html是不会有的