HttpConnection维护会话

时间:2012-02-03 16:26:25

标签: java tomcat java-me session-cookies httpconnection

我正在使用Rest架构消耗一些在java中完成的Web服务,我的客户端是一个使用HttpConnection来检索数据的移动应用程序。为了控制身份验证和授权我正在使用由@SessionScoped类管理的cookie,但是我不知道如何通过请求使会话保持不变。问题基本上是我将会话管理器注入到@RequestScoped的其他服务中,但是由于会话没有持久化,我总是检索@SessionScoped类的不同实例,从而删除我之前拥有的所有cookie或记录。查看请求标头我注意到了cookie JSESSIONID,我认为这是由tomcat发送的,以便持久化会话,因此尝试在下一个请求中发送相同的cookie,但是没有结果。

1 个答案:

答案 0 :(得分:0)

评论是正确的......要坚持一个会话,你只需要在下一个请求中将JSESSIONID cookie发送回服务器,在这种情况下的问题是JavaME中的HttpConnection只有setRequestProperty方法来包含一个头值,现在如果你设置相同的值两次,它会覆盖最后一个。由于我使用的是自定义cookie和JSessionID cookie,因此我按以下方式设置它们:

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();