2012-02-03 112 views
0

我正在使用Rest體系結構消耗一些在java中完成的Web服務,我的客戶端是使用HttpConnection來檢索數據的移動應用程序。爲了控制身份驗證和授權,我使用Cookie,由@SessionScoped類管理,但我不知道如何通過請求使會話持續存在。問題的根本在於我在其他服務中注入了Session管理器,但是由於會話沒有持久化,我總是爲@SessionScoped類檢索不同的實例,從而刪除了之前的所有cookie或記錄。查看請求標頭,我注意到了JSESSIONID的Cookie,我認爲這是由tomcat發送的,以便持久化會話,所以嘗試在下一個請求中發送相同的cookie,但是我沒有得到任何結果。HttpConnection維護會話

+0

當你說「HttpConnection」時,你是否確實是指'HttpURLConnection'?如果是這樣,請繼續閱讀:http://stackoverflow.com/questions/2793150/how-to-use-java-net-urlconnection-to-fire-and-handle-http-requests – BalusC 2012-02-03 16:28:17

+0

不......不幸的是我使用JavaME,這就是爲什麼它是HttpConnection – Pablo 2012-02-03 16:54:13

+0

在我的頭我接收這樣的事情頭:1,設置Cookie:JSESSIONID = C2j31psXI5bEhlXwXdormU3L;路徑= /簡單的登錄; Secure – Pablo 2012-02-03 16:58:52

回答

0

評論是正確的......要堅持一個會話,您只需在下一個請求中將JSESSIONID cookie發送回服務器,這種情況下的問題是JavaME中的HttpConnection只有setRequestProperty方法才能包含頭值,現在如果您將相同的值設置爲兩次,它將覆蓋最後一個值。由於我使用的是自定義的cookie和JSESSIONID餅乾,我設置好的他們通過以下方式:

connection.setRequestProperty("Cookie","sessionId="+ApplicationPreferences.getIn‌​stance().getSessionCookieHeader()); 
connection.setRequestProperty("Cookie","JSESSIONID="+ApplicationPreferences‌​.getInstance().getJavaSessionCookieHeader()); 

當正確的方式做到這一點是串聯cookie的字符串,然後設置與他們全部Cookie頭:

String myCookies="sessionId="+ApplicationPreferences.getInstance().getSessionCookieHead‌​er()+";"+"JSESSIONID="+ApplicationPreferences.getInstance().getJavaSessionCookieHeade‌​r();