2010-10-18 116 views
5

我們最近更改了我們的登錄以使用HTTPS,並且我們遇到登錄問題。HTTPS登錄未將JSESSIONID保存在cookie中

登錄後,用戶被重定向到未加密(HTTP)頁面。當它到達這個頁面時,站點檢查用戶是否登錄。它創建一個新的會話,並且看起來用戶沒有登錄,因此我們的用戶被重定向到登錄頁面。如果用戶再次登錄,它將起作用。

Cookie未設置爲僅限https,但似乎不能在http頁面上工作。

有誰知道爲什麼會發生這種情況。

編輯:

我應該提到,顯示登錄頁面是在不同的URL。 (運行tomcat實例的機器有一個登錄頁面,但營銷網站在wordpress安裝並使用不同的域)。

我無法使用HTTP請求優先方法來設置Cookie,因爲默認的Internet Explorer設置會阻止保存會話cookie。

+0

你可以將會話作爲post參數提交給http頁面並讓它在新域中設置會話嗎? – 2010-10-21 07:24:47

+0

OP表示他/她將無法驗證任何如TL結束的答案。 – Kev 2012-09-07 23:28:47

+0

這需要重新開放,因爲它是一個似乎無法解決的真實和持續的問題。我們有一個開發團隊試圖在數月內推出一個解決方案。升級Tomcat並沒有工作,因爲它似乎是有意的行爲,但是這種預期的行爲使得無法使用外部域,這不是web 2.0! – 2013-06-18 00:58:28

回答

1

使用https tomcat時,通過安全cookie建立jsessionid,不能通過非安全連接傳輸。所以當你回到http會話丟失。

解決方法(我自己沒做過)似乎是在重定向到https之前通過http請求建立會話,然後在HttpRequestWrapper中設置一個過濾器以插入非安全cookie。

我不知道很多關於這一點,但這裏有幾個引用:

+0

但是,我想知道爲什麼當用戶第二次登錄時適用於您。 – christian 2010-10-18 23:18:28

+0

由於其中一個重定向轉到HTTP(非安全)頁面。 – partkyle 2010-10-19 00:37:52

+0

這會起作用,但問題在於我們的營銷網站位於不同的URL上,從而阻止Internet Explorer(以最低的默認設置)從另一個域設置Cookie。你有什麼想法嗎? – partkyle 2010-10-19 05:42:32

3

我們有這個問題與我們的應用程序。我們想要通過https登錄的類似行爲,然後重定向到http頁面。

問題是,當Tomcat根據https創建會話時,它會創建一個安全的cookie,無法在http中讀取。請注意,這不斷被歸檔爲Tomcat中的一個bug,並被標記爲「不是bug」。

我們最終的解決方案是基於在這個論壇 http://forum.java.sun.com/thread.jspa?threadID=197150&start=0

從論壇主題引述消息:「保持在Tomcat中會話的一種方式,當在SSL模式下得到創建的會話cookie通過創建不安全的cookie來欺騙瀏覽器,當安全cookie被創建時。「這是通過包裝請求並覆蓋request.getSession()的過濾器完成的。這對我們非常有用。

作爲一個附註,從https到http頁面的重定向將在某些版本的Internet Explorer中彈出警告消息「您即將被重定向到一個不安全的連接。」我們發現避免這種情況的唯一方法是使用元刷新標記進行重定向。具體來說,從原始https請求中返回一個空白頁面,其中包含一個刷新到http頁面的元標記。這避免了警告信息,代價是使代碼稍微複雜一些。

(我剛剛注意到這裏的一些建議是重複一個較早的答案 - 我很抱歉,但會反正,因爲它來自直接經驗)。

編輯:我在你的評論中看到你有兩個域名,這使得cookies的使用變得複雜。您可以使用代理或Web服務器(如Apache)向最終用戶展示一個域?

+0

提到的論壇主題的新網址似乎是https://forums.oracle.com/forums/thread.jspa?threadID=1394970 – ivant 2013-05-09 08:11:52

0

如果您已驗證安全專用標誌已關閉,並且第一個Cookie正確放置正確 - 我猜測可能存在阻止再次顯示cookie的路徑問題。