如何使用jsp在flex中保持最后的cookie值?

时间:2010-05-31 13:02:30

标签: java flex jsp flex3

登录时我在flex中的登录表单我在jsp中创建了一个像这样名称的cookie setValueCookie.jsp

<%@ page language="java" import="java.util.* , javax.net.*" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<%
    String username = request.getParameter("value");
    System.out.println("Email got in cookieSet = " + username);

    if(username==null) username="";

    Date now = new Date();
    String timestamp = now.toString();
    Cookie cookie = new Cookie("username",username);
    cookie.setMaxAge(365 * 24 * 60 * 60);
    response.addCookie(cookie);

%>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>DashBoard-Cookie</title>
</head>
<body>

</body>
</html>

现在使用Http服务请求参数我将用户名'Value'传递给此jsp。我正在从 getValueCookie.jsp 中读取cookie值

<%
 String cookieName = "username";
 Cookie cookies [] = request.getCookies ();
 Cookie myCookie = null;
 String result; 
 if (cookies != null)
 {
 for (int i = 0; i < cookies.length; i++) 
 {
    if (cookies [i].getName().equals (cookieName))
    {
    myCookie = cookies[i];
    break;
    }
 }
}

%>
<data>
  <status><%=myCookie.getValue().toString()%></status>
</data>

通过我得到的httpservice值,但如果我打开一个新窗口或任何新的选项卡cookie值没有得到我怎么能解决这个问题?提前谢谢。

1 个答案:

答案 0 :(得分:1)

即使发布的代码非常繁琐且令人讨厌(第二个示例可以通过简单的${cookie.username.value}在EL中完成, scriptlet 也是禁止的,这应该是(in)直接在HttpServletFilter)中,代码看起来是合法的。

有两个可能的原因:

  1. Cookie绑定到当前请求协议,域和(默认情况下)上下文路径。因此,如果您按其中任何一个切换,那么其他请求中的cookie将无法访问。

  2. 修改响应标头(需要在响应标头中设置cookie)JSP文件中途要求IllegalStateException: Response already committed例外。检查服务器日志。如果他们在那里,那么只需将 scriptlet 移动到JSP页面的顶部或 - 最好 - ,只需轻轻地使用HttpServletFilter。 JSP是这种逻辑的错误位置。

  3. 那就是说,您考虑过使用HttpSession吗?它提供了相同的功能,但更容易,更少问题,因为您不需要麻烦松散的cookie。按request.getSession()抓取会话,并使用session.setAttribute(key, value)在会话中存储对象,并使用session.getAttribute(key)从会话中检索对象。在那里会话是,它又由cookie支持,但你不需要自己管理它。服务器将透明地为您完成。