2012-03-23 33 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