问题 在没有浏览器的情况下以编程方式保持HTTP Session Alive


对于我们的一个要求,我在使用HTTP协议的两台服务器之间进行通信。交互是长时间运行的,用户可能不会在很长的时间间隔内与其他站点进行交互。

当他们来到页面时,登录到远程站点。每次用户尝试与远程站点交互时,我都会在内部进行HTTP调用(基于sessionId进行身份验证)。

我想知道是否有办法刷新会话并确保它不会过期。

根据我的有限理解,浏览器通过在标头或cookie中传递keep-alive来处理这个问题(我完全不了解)。任何人都可以建议在Java中采用编程方式来实现保持活动的行为


4419
2017-10-04 02:18


起源

没有这样的魔力;如果允许Keep-Alive,则在第一次请求后,TCP / IP连接将保持打开状态。 - EricLaw
我们需要区分连接超时,它发生在TCP / IP层上,与HTTP会话超时无关,后者发生在上面的层上。 @Fazal希望保持活力的是HTTP会话,而不是TCP连接。 - Twilite
我需要这个来实现一个不错的SSO解决方案...... - CelinHC


答案:


1。 

 <session-config>
         <session-timeout>-1</session-timeout>
 </session-config>

如果代码在部署描述符(DD)中,则只需粘贴此部分。
如果要在特定的持续时间内保持会话处于活动状态,请将-1替换为任何正数值。
此处指定的时间以分钟为单位。

2。

如果要更改特定会话实例的会话超时值,而不影响应用程序中任何其他会话的超时长度:

session.setMaxInactiveInterval(30*60);


**********************


10
2017-10-04 10:57



谢谢..我喜欢这个主意。但我的目的是模拟浏览器行为。因此,如果我不断收到来自远程服务器的请求,我只会保持会话处于活动状态。但我不知道从远程服务器的http请求中设置什么标头以保持会话活动 - Fazal


我想下面的代码可以帮助你,如果你可以传递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);

1
2017-08-19 18:14





看看吧 Apache HttpClient 并看到 它的教程。 HttpClient支持保持活动标头和其他功能,使您能够以编程方式进行HTTP调用。


0
2017-10-04 02:29



谢谢,我会尝试并尽快更新 - Fazal