Pergunta

Como o HTTP é um protocolo sem estado, quando um cliente faz várias solicitações ao servidor, como o servidor identifica exclusivamente as solicitações de um cliente em particular por um período de tempo, digamos T1, T2, T3 ..

Eu naveguei na web e encontrei os termos, como ID da sessão, reescrita de URL e cookies. Mas seria ótimo se alguém explicar de uma maneira melhor. Especificamente, qual parte da solicitação e resposta HTTP seria usada para rastreamento de sessão?

Foi útil?

Solução

Como você mencionou, maneiras comuns de implementar o rastreamento da sessão HTTP incluem reescrita e cookies de URL. O rastreamento da sessão requer basicamente que um ID da sessão seja mantido em várias solicitações ao servidor. Isso significa que cada vez que um determinado cliente faz uma solicitação ao servidor, ele passa o mesmo ID da sessão. O servidor pode usar este ID para procurar as informações da sessão que mantém.

Ao usar cookies, o servidor pede ao cliente para armazenar um cookie definindo o Set-Cookie Cabeçalho de resposta HTTP. Este cookie contém o ID de sessão exclusivo atribuído a esse cliente - neste exemplo a string 'abad1d':

    Set-Cookie: JSESSIONID=ABAD1D;path=/

O cookie é então enviado de volta ao servidor pelo cliente usando o Cookie Cabeçalho de solicitação HTTP em cada solicitação e, portanto, o servidor é informado em cada solicitação, o ID da sessão atualmente atribuído ao cliente.

    Cookie: JSESSIONID=ABAD1D

Ao usar a reescrita de URL, esse mesmo ID da sessão é enviado em algum lugar do URL. Novamente, o servidor extrai o ID da sessão do URL para que possa procurar a sessão para um cliente específico:

    http://my.app.com/index.jsp;JSESSIONID=ABAD1D

No entanto, o servidor também deve garantir que quaisquer URLs nas páginas da web enviados de volta ao cliente também sejam reescritos para conter o ID da sessão de clientes específicos. Como o ID da sessão é codificado nos URLs, esse método de rastreamento de sessão é transparente para o navegador. Muitas vezes, um servidor recorre à reescrita da URL se achar que não é possível definir um cookie de sessão no cliente - o que implica que o cliente não suporta/permite cookies.

Observe que as sessões podem expirar. Isso significa que, se o servidor não 'consulte' um determinado ID da sessão por um período de tempo, poderá remover os dados da sessão para preservar os recursos.

Outras dicas

Especificamente, qual parte da solicitação e resposta HTTP seria usada para rastreamento de sessão?

Na resposta HTTP, o servidor pode definir um cookie. Faz isso com o cabeçalho do conjunto de defesa. Por exemplo:

Set-Cookie: session=12345; path=/

O cliente retorna o valor de todos os cookies que correspondem às propriedades definidas junto com o cookie, que pode incluir caminho (como acima) e domínio, e que ainda não expiraram.

O cookie é enviado de volta ao servidor como parte dos cabeçalhos HTTP. Por exemplo:

Cookie: session=12345

Nenhuma das informações originais da propriedade é enviada de volta com o cookie.

Um cookie exclusivo permite que o servidor associe uma chave exclusiva a uma instância de navegador específica. O servidor pode então usar essa chave como um índice em uma tabela de hash ou em uma tabela de banco de dados que contém informações exclusivas do estado do usuário.

O rastreamento da sessão é uma coisa do lado do servidor.

Um servidor da web emite algum identificador de sessão que é retornado ao navegador. O navegador envia este identificador de sessão junto com cada solicitação.

Provavelmente, isso é feito usando cookies de forma transparente para o usuário.

O manuseio da sessão é, na maioria dos casos bolacha para o cliente. Esse cookie seria enviado de volta ao servidor em todas as solicitações desse cliente específico.

o session id estarão associados a alguns recursos no lado do servidor (arquivo, espaço na RAM) para que o servidor leia o session id No cookie pode encontrar esse recurso e depois saber qual cliente era.

Encontre detalhes suficientes aqui

Sessões HTTP são a abordagem recomendada. Uma sessão identifica os pedidos que se originam do mesmo navegador durante o período de conversa. Todos os servlets podem compartilhar a mesma sessão. O JSessionID é gerado pelo servidor e pode ser transmitido ao cliente através de cookies, o URL reescrevendo (se os cookies forem desligados) ou o mecanismo SSL integrado. Deve -se tomar cuidado para minimizar o tamanho dos objetos armazenados na sessão e os objetos armazenados na sessão devem ser serializáveis. Em um servlet java, a sessão pode ser obtida da seguinte forma:

Session httpSession = request.getSession (); // Retorna a sessão atual ou uma nova sessão

As sessões podem ser cronometradas (configuradas em web.xml) ou invalidadas manualmente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top