2014-05-14 29 views
1

改變我需要改變JSESSIONID的域名爲「.something.com」在context.xml文件:值JSESSIONID是不是無效會話

<Context path="/test" sessionCookiePath="/" sessionCookieDomain=".something.com" useHttpOnly="true" /> 

之後,當我執行httpSession.invalidate( )會話被重置,但JSESSIONID值不會更改。我正在使用Java 7,Spring MVC和Tomcat 7.我也嘗試手動刪除JSESSIONID cookie,但似乎Tomcat或Spring不會讓我更改其值。

這可能很難在我的系統上進行故障排除。我想知道是否有可能在Spring或Tomcat中改變這種行爲。

+0

你能在「會話被重置,但JSESSIONID值不會改變」你怎麼知道它的復位,以及如何擴大你在檢查JSESSIONID值嗎? – DangerDan

+0

在我的應用程序中,當用戶點擊初始頁面並且會話不是新的(即,它有一些數據)時,會有警告消息。 我可以看到JSESSIONID值看着瀏覽器的cookies(鉻開發工具) – joaosavio

回答

2

我發現這個問題Tomcat的文檔中:

「注:一旦使用sessionCookiePath =一個Web應用程序」 /」獲得一個會話,在同一臺主機的任何其他Web應用程序的所有後續會話也sessionCookiePath =配置「/」將始終使用相同的會話ID,即使會話失效並創建了新會話ID,也會導致會話固定保護更加困難,並需要定製Tomcat特定代碼來更改多個應用程序共享的會話ID。 「

來源:http://tomcat.apache.org/tomcat-7.0-doc/config/context.html

的問題與Cookie路徑,而不是與域

+0

最後找到理由,謝謝!我一直在指責Spring Security破壞會話固定保護。 – user2417480

1

假設您使用Spring Security,您可以配置會話註銷處理程序爲您刪除cookie。

... 
<logout delete-cookies="JSESSIONID"> 
... 

或者,在Java配置,在一個WebSecurityConfigurerAdapter

@Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
      ... 
      .logout() 
       .deleteCookies("JSESSIONID"); 
    } 

如果你不使用Spring Security,您也許可以安裝一個Filter對象到Spring現有的過濾器鏈刪除Set-Cookie頭在會話已失效的傳出請求中(或者在您指定的任何條件下)。無論如何,這或多或少是Spring Security的註銷處理程序所做的。

+0

我認爲這個解決方案使用Spring Security。有沒有辦法做到這一點與Spring MVC? – joaosavio

+0

我修改了答案,以說明如何在Spring Security之外執行此操作。要實現它,你需要一些關於servlet過濾器和HTTP頭的基本知識。 – Misha