我正在使用一些使用 Rest 架构在 Java 中完成的 Web 服务,我的客户端是一个使用 HttpConnection 检索数据的移动应用程序。为了控制身份验证和授权,我使用由 @SessionScoped 类管理的 cookie,但是我不知道如何通过请求使 session 持续存在。问题基本上是我在@RequestScoped 的其他服务中注入(inject)了 session 管理器,但是由于 session 没有持久化,我总是为@SessionScoped 类检索不同的实例,从而删除了我之前拥有的所有 cookie 或记录。查看请求 header ,我注意到 cookie JSESSIONID,我认为这是由 tomcat 发送的以保持 session ,因此已经尝试在下一个请求中发送相同的 cookie,但是我没有得到任何结果。
最佳答案
评论是正确的...要保持 session ,您只需在下一个请求中将 JSESSIONID cookie 发送回服务器,这种情况下的问题是 JavaME 中的 HttpConnection 只有 setRequestProperty 方法来包含 header 值,现在如果您两次设置相同的值,它会覆盖最后一个。由于我使用的是自定义 cookie 和 JSessionID cookie,因此我按以下方式设置它们:
connection.setRequestProperty("Cookie","sessionId="+ApplicationPreferences.getInstance().getSessionCookieHeader());
connection.setRequestProperty("Cookie","JSESSIONID="+ApplicationPreferences.getInstance().getJavaSessionCookieHeader());
正确的做法是连接 cookie 字符串,然后为它们设置一个 Cookie header :
String myCookies="sessionId="+ApplicationPreferences.getInstance().getSessionCookieHeader()+";"+"JSESSIONID="+ApplicationPreferences.getInstance().getJavaSessionCookieHeader();
关于java - HttpConnection维护Session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9131938/