2011-10-04 12 views
11

Per uno dei nostri requisiti sto parlando tra due server utilizzando il protocollo HTTP. L'interazione è di lunga durata, in cui un utente potrebbe non interagire con l'altro sito per intervalli piuttosto lunghi.Mantenere in modo programmatico HTTP Session Alive senza browser

Quando arrivano alla pagina, il log in nel sito remoto. Ogni volta che l'utente tenta di interagire con il sito remoto, eseguo internamente una chiamata HTTP (l'autenticazione viene eseguita in base a sessionId).

Mi chiedevo se c'è un modo per aggiornare anche la sessione e assicurarsi che non scada.

Secondo la mia comprensione limitata, il browser gestisce questo passando keep-alive in header o cookie (che non capisco completamente). Qualcuno può suggerire un modo programmatico in Java per ottenere un comportamento keep-alive

+0

Non esiste la magia; la connessione TCP/IP viene semplicemente lasciata aperta dopo la prima richiesta se Keep-Alive è consentito. – EricLaw

+1

È necessario distinguere tra timeout della connessione, che si verifica sul livello TCP/IP e non è correlato al timeout della sessione HTTP, che si verifica sul livello precedente. Cosa @Fazal vuole mantenere in vita è la sessione HTTP, non la connessione TCP. – Twilite

+0

Ho bisogno di questo per implementare una bella soluzione SSO ... – CelinHC

risposta

0

Dai un'occhiata a Apache HttpClient e vedi its tutorial. HttpClient supporta mantenere intestazioni attive e altre funzionalità che dovrebbero consentire di effettuare una chiamata HTTP a livello di programmazione.

+0

Grazie Proverò e aggiornerò presto – Fazal

10

1.

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

Basta incollare questo pezzo se codice nel tuo descrittore di deployment (DD).
Se si desidera mantenere in vita la sessione per un particolare periodo di tempo, sostituire -1 con qualsiasi valore numerico positivo.
Il tempo specificato qui è espresso in minuti.

2.

Se si desidera modificare il valore di timeout di sessione per una particolare istanza di sessione senza influenzare la durata del timeout di qualsiasi altra sessione nell'applicazione:

session.setMaxInactiveInterval(30*60); 


** * *** *** *** *** *** *** *
Nota:

1. In DD, il tempo specificato è minuti.
2.Se lo si fa in modo programmatico, il tempo specificato è secondi.

Spero che questo aiuti :)

+0

Grazie .. Mi piace questa idea. Ma la mia intenzione qui è di simulare il comportamento del browser. Quindi terrei viva la sessione solo se continuo a ricevere richieste dal server remoto. Ma non so quale intestazione impostare nella richiesta http dal server remoto per mantenere viva la sessione – Fazal

1

immagino sotto il codice può aiutare, se si può passare JSESSIONID biscotto allora il vostro contenitore si assumerà la responsabilità di mantenere in vita se stessa sessione che potrebbe essere creato da un altro browser la sessione .

trovare il link sotto che ha spiegato molto.

Click Here

Codice frammento dal link qui sopra

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); 
Problemi correlati