O cookie JSESSIONID é criado / enviado quando a sessão é criada. A sessão é criada quando o seu código chama request.getSession()
ou request.getSession(true)
pela primeira vez. Se você deseja apenas obter a sessão, mas não criá-la se ela não existir, use request.getSession(false)
- isso retornará uma sessão ou null
. Nesse caso, a nova sessão não é criada e o cookie JSESSIONID não é enviado. (Isso também significa que a sessão não é necessariamente criada na primeira solicitação ... você e seu código estão no controle quando a sessão é criada)
As sessões são por contexto:
Escopo da Sessão SRV.7.3
Os objetos HttpSession devem ter um escopo definido no nível do aplicativo (ou contexto do servlet). O mecanismo subjacente, como o cookie usado para estabelecer a sessão, pode ser o mesmo para diferentes contextos, mas o objeto referenciado, incluindo os atributos desse objeto, nunca deve ser compartilhado entre contextos pelo contêiner.
( Especificação Servlet 2.4 )
Atualização: Toda chamada para a página JSP cria implicitamente uma nova sessão se ainda não houver uma sessão. Isso pode ser desativado com a session='false'
diretiva page, caso em que a variável de sessão não está disponível na página JSP.
request.getSession()
ourequest.getSession(true)
, então recebe uma sessão nova ou existente. No entanto, se o seu código chamarrequest.getSession(false)
, você terá uma sessão existente ou nula, se não houver uma sessão.Aqui estão algumas informações sobre mais uma fonte do
JSESSIONID
cookie:Eu estava apenas depurando algum código Java que é executado em um servidor tomcat. Eu não estava chamando
request.getSession()
explicitamente em nenhum lugar do meu código, mas notei que umJSESSIONID
cookie ainda estava sendo definido.Finalmente, examinei o código Java gerado correspondente a uma JSP no diretório de trabalho no Tomcat.
Parece que, gostando ou não, se você chamar uma JSP de um servlet,
JSESSIONID
será criado!Adicionado: acabei de descobrir isso adicionando a seguinte diretiva JSP:
você pode desativar a configuração de
JSESSIONID
um JSP.fonte
CORREÇÃO: Vote na resposta de Peter Štibraný - é mais correta e completa!
Um "JSESSIONID" é o ID exclusivo da sessão http - veja o javadoc aqui . Lá, você encontrará a seguinte frase
Portanto, quando você acessa um site pela primeira vez, uma nova sessão é criada e vinculada ao SevletContext. Se você implantar vários aplicativos, a sessão não será compartilhada.
Você também pode invalidar a sessão atual e, portanto, criar uma nova. por exemplo, ao mudar de http para https (após o login), é uma boa ideia criar uma nova sessão.
Espero que isso responda sua pergunta.
fonte
Cuidado se sua página estiver incluindo outros arquivos .jsp ou .jspf (fragmento)! Se você não definir
neles também, a página pai terminará iniciando uma nova sessão e configurando o cookie JSESSIONID.
Para páginas .jspf, em particular, isso acontece se você configurou seu web.xml com um fragmento:
para ativar os scriptlets dentro deles.
fonte
Para links gerados em um JSP com tags personalizadas, eu tive que usar
no JSP
E
na ação Struts
fonte