日期:2014-05-17  浏览次数:20749 次

frame中的session问题
写了个登陆界面"login.jsp" 在servlet中有此语句:
session.setAttribute("username",username);
request.getRequestDispatcher("frame.jsp").forward(request, response);可以在登陆成功后跳转到frame.jsp
frame.jsp是我的框架页面,代码是:
<html>
  <head>
   
  <title>欢迎使用</title>
   
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">  
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">


  
<frameset rows="18%,*">
<frame noresize="noresize" frameborder="0" scrolling="no" src="bg.jsp" name="top"> 
<frameset cols="22%,*" >
<frame id="left" noresize="noresize" frameborder="0" scrolling="no" src="treemenu.jsp" name="left"></frame>
<frame noresize="noresize" frameborder="0" scrolling="no" src="home.jsp" name="right"></frame>
</frameset>
</frameset>
<%
String username=(String)session.getAttribute("username");
if(username==null)
{
response.sendRedirect("login.jsp");
}
%>
</head>
<body>
</body>
</html>
当没有接收到session值时frame.jsp会跳转到登陆页面"login.jsp"。
之后我又在"bg.jsp","treemenu.jsp","home.jsp"都加入了以下代码
<%
String username=(String)session.getAttribute("username");
if(username==null)
{
response.sendRedirect("login.jsp");
}
%>
当别人直接访问这三个页面时,由于没有session值,会跳转到"login.jsp"。

问题来了,当我在浏览器输入"login.jsp"登陆时,可以登陆到frame.jsp,但它的三块"bg.jsp","treemenu.jsp","home.jsp"显示的都是"login.jsp"页面,显然是没有接收到username值,这是为什么呢,
奇怪的是当我直接输入"frame.jsp"登陆时,由于没有username值会先跳转到"login.jsp",此时我在用这个"login"页面登录,"bg.jsp","treemenu.jsp","home.jsp"都显示正常,此时又能接收到username值了
这个问题之前是没有的,我昨晚重装了下谷歌浏览器就这样了,这是什么原因?

------解决方案--------------------
response.addHeader("P3P", "CP=CAO PSA OUR");
在处理 login 验证的时候, 加上这句, 

------解决方案--------------------
可能是session中用户信息还没保存进去,而"bg.jsp","treemenu.jsp","home.jsp"就已经显示完了,导致不同步