2011-10-04 31 views
11

對於我們的一個要求,我在使用HTTP協議的兩臺服務器之間進行通話。交互很長時間,用戶可能不會與其他站點進行很長時間的交互。在沒有瀏覽器的情況下,以編程方式保持HTTP會話活躍

當他們來到頁面時,登錄到遠程站點。每次用戶嘗試與遠程站點交互時,都會在內部進行HTTP調用(認證基於sessionId完成)。

我想知道是否有辦法刷新會話並確保它不會過期。

根據我的理解,瀏覽器通過在頭文件或cookie中傳遞保持活動來處理這個問題(我完全不明白)。任何人都可以在Java中使用編程方式來實現保持活動行爲

+0

沒有這樣神奇;如果Keep-Alive被允許,TCP/IP連接在第一次請求之後保持打開狀態。 – EricLaw

+1

我們需要區分連接超時,它發生在TCP/IP層上,與HTTP會話超時無關,發生在上面的層上。 @Fazal希望保持活力的是HTTP會話,而不是TCP連接。 – Twilite

+0

我需要這個來實現一個很好的SSO解決方案... – CelinHC

回答

0

看一看Apache HttpClient並參見its tutorial。 HttpClient支持保持活動的頭文件和其他功能,這些功能可以讓你以編程方式進行HTTP調用。

+0

謝謝我會盡力並儘快更新 – Fazal

10

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

這一塊,如果代碼只需粘貼到你的部署描述符(DD)。
如果您想讓會話在特定的持續時間內保持活動狀態,請用任何正數字值替換-1。
此處指定的時間以分鐘爲單位。

2.

如果要更改特定會話實例會話超時值,而不會影響任何其他會話的應用程序超時長度:

session.setMaxInactiveInterval(30*60); 


** * ** * ** * ** * ** * ** * ** * *
注:

1.在DD中,指定的時間爲分鐘
2.如果以編程方式進行,指定的時間爲

希望這有助於:)

+0

謝謝..我喜歡這個主意。但我的意圖是模擬瀏覽器行爲。所以如果我不斷收到來自遠程服務器的請求,我只會保持會話活動。但我不知道在遠程服務器的http請求中設置了什麼頭文件來保持會話的活躍 – Fazal

1

我想下面的代碼可以幫助你,如果你能通過JSESSIONID Cookie,則您的容器將承擔責任,以保持會話活着,如果有可能從其他瀏覽器中創建了相同的會話。

找到下面的鏈接,說明了很多。從鏈接

Click Here

代碼段中

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); 
相關問題