对于我们的一个要求,我在使用HTTP协议的两台服务器之间进行通信。交互是长时间运行的,用户可能不会在很长的时间间隔内与其他站点进行交互。
当他们来到页面时,登录到远程站点。每当用户尝试与远程站点交互时,我在内部进行HTTP调用(基于sessionId进行验证)。
我想知道是否有办法刷新会话并确保它不会过期。
根据我的有限理解,浏览器通过在标头或cookie中传递keep-alive来处理此问题(我完全不了解)。任何人都可以在Java中建议采用编程方式来实现保持活动的行为
答案 0 :(得分:10)
1。
<session-config>
<session-timeout>-1</session-timeout>
</session-config>
如果部署描述符(DD)中的代码,只需粘贴此部分即可
如果您希望在特定的持续时间内保持会话活动,请将-1替换为任何正数值
此处指定的时间以分钟为单位
<强> 2 强>
如果要更改特定会话实例的会话超时值,而不影响应用程序中任何其他会话的超时长度:
session.setMaxInactiveInterval(30*60);
的 强> 的 ** * ** * ** * 的** * ** * ** * ** * * 强>
注意:
1.在DD中,指定的时间为分钟 2.如果以编程方式执行,指定的时间为秒。
希望这会有所帮助:)
答案 1 :(得分:1)
我想下面的代码可以帮助你,如果你可以传递JSESSIONID cookie,那么你的容器将负责保持会话活着,如果它可能是从其他浏览器创建的相同会话。
找到下面的链接,解释了很多。
上面链接中的代码段
BasicCookieStore cookieStore = new BasicCookieStore();
BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", "97E3D1012B3802114FA0A844EDE7B2ED");
cookie.setDomain("localhost");
cookie.setPath("/CookieTest");
cookieStore.addCookie(cookie);
HttpClient client = HttpClientBuilder.create().setDefaultCookieStore(cookieStore).build();
final HttpGet request = new HttpGet("http://localhost:1234/CookieTest/CookieTester");
HttpResponse response = client.execute(request);
答案 2 :(得分:0)
查看Apache HttpClient并查看its tutorial。 HttpClient支持保持活动标头和其他功能,使您能够以编程方式进行HTTP调用。