2012-03-23 29 views
1

我已经使用下面的代码来设置cookie,然后重定向。回复addCookie()并发送重定向()

String level=(String) request.getAttribute("level"); 

if(level!=null) 
{ 
    Cookie cookie=new Cookie("level",level); 
    cookie.setMaxAge(-1); 
    cookie.setPath("http://localhost:8080/saml"); 

    response.addCookie(cookie); 

    response.sendRedirect("http://​localhost:8080/saml/someservices.jsp"); 
} 


此代码工作正常。但我想知道如何?因为当jsp引擎正在解析jsp代码时,它将首先遇到addCookie和发送重定向。是否在行response.addCookie(cookie);之后立即添加cookie?如果我以相反的方式给它,即第一个sendRedirect(),然后addCookie()? jsp引擎如何看待这个?

回答

6

将Cookie添加到HTTP响应标头。重定向也在头文件中指定。当您发送重定向时,两者都会被发送回客户端。

如果颠倒的addCookiesendRedirect顺序,它威力仍能正常工作,这取决于底层的servlet容器事件的确切顺序。但我不会推荐它。

+1

第二种方法不起作用。谢谢 – suraj 2012-03-23 10:58:06

-3

如果代码工作是因为sendRedirect()方法创建了新的请求,并且在此过程中前一个响应中的所有内容都被重置,这意味着所有cookie都将丢失,我会感到惊讶。新资源http://​localhost:8080/saml/someservices.jsp及其关联的servlet(如果有)将无法获取名为“级别”的cookie。

+3

你的“惊喜”是不​​正确的。它当然可以按照HTTP规范工作。 – BalusC 2013-01-11 02:51:32

+0

我在MSIE9下有这个问题(MSIE收到cookie但没有发送重定向请求)。我通过添加带有简洁隐私策略的P3P标题解决了这个问题,请参阅http://stackoverflow.com/questions/7384502/ie9-loses-cookies-after-redirect – 2013-10-23 12:18:29