2013-10-09 61 views
1

這是我的情況,我有一個網站,我只是使用Apache HTTPD加載,然後將Ajax POST請求發送到只返回JSON數據的servlet。然後,JSON數據用於更新表等。沒有cookie的Servlet會話+僅返回JSON的ajax請求

現在我想將用戶邏輯添加到我的網站,並且還維護個人用戶發出的請求的servlet會話。

我知道servlet需要將第一次調用生成的會話標識返回給request.getSession(),以便客戶端可以將此sessionid添加到將來的Ajax請求中,以便servlet知道內存中的哪個會話使用。

我也明白,這個會話ID可以返回給客戶端的兩種方式是使用cookie(JESSIONID)或URL重寫。

如果我不能使用URL重寫,因爲我只是返回JSON數據,Cookie是我剩下的將會話ID發送回客戶端的唯一方法嗎?

另外,作爲一個側面的問題,目前我注意到在servlet的任何HTTP響應中都沒有JSESSIONID cookie。有人向我建議,這是Tomcat7中的新東西,我必須在全局context.xml中激活它們。這是否意味着即使您調用request.getSession(),默認情況下也沒有會話處理?

回答

0

您已正確識別處理Tomcat支持的會話ID的三種方式中的兩種。還有第三種方式來跟蹤會話,但只有在應用程序通過SSL運行時纔有效。在這種情況下,您可以配置Tomcat以使用SSL會話ID。

如果Servlet調用request.getSession(),那麼Tomcat總是在響應中包含一個會話ID。但是,在Tomcat 7之後,這些cookie在默認情況下標記爲httpOnly,這意味着它們對JavaScript不可見(以防止試圖竊取cookie的XSS攻擊)。如果會話cookie需要對腳本可見,那麼您需要在Web應用程序的context.xml(要更改該文件的默認值)或$ CATALINA_BASE/conf/context.xml中設置useHttpOnly =「false」以更改每個Web應用程序的默認設置。

+0

好的,謝謝這是真的也有SSL方法,但我沒有考慮它,因爲我們現在不使用HTTPS,雖然我們確實在談論未來獲得證書。好的,所以我想現在我沒有選擇,只能使用cookie。即使使用HttpOnly =「false」,我仍然沒有看到它們,所以我可能仍然在做錯事,我會進一步調查。謝謝。 – greenkarmic