Cookies e sessão têm como objetivo manter o status de acesso ao usuário. Por um lado, é facilitar a implementação dos negócios e, por outro lado, é simplificar a programação do servidor e melhorar o desempenho do acesso. Os cookies são a tecnologia do cliente (ou seja, navegador). Depois de definir cookies, toda vez que você visitar o servidor, os cookies serão trazidos para a solicitação; A sessão é a tecnologia do servidor, que armazena informações de acesso ao usuário no servidor.
Use cookies para fornecer informações. À medida que o número de cookies aumenta e o número de visitas aumenta, a largura de banda que consome se tornará cada vez maior; Ao usar a sessão para salvar informações, a maior fraqueza é que não é fácil compartilhar entre vários servidores.
1 biscoitos
Nos termos do leigo, quando um usuário acessa o servidor usando HTTP, o servidor retornará algumas informações sobre pares de valores-chave ao navegador do cliente e adicionará algumas restrições a esses dados. Quando o usuário atende às restrições, na próxima vez que o usuário acessa o servidor, ele trará o conjunto de informações dos pares de valores-chave do cookie anteriormente. Quando o usuário entra em um URL, o navegador procura os cookies associados ao URL no disco rígido local. Se o cookie existir, o navegador envia o cookie para o seu site junto com a solicitação da página.
Os cookies estão associados a sites, não a páginas específicas. Portanto, independentemente de qual página no site o navegador e o servidor trocarão informações de cookies. Quando um usuário visita sites diferentes, cada site pode enviar um cookie para o navegador do usuário; O navegador armazenará todos os cookies separadamente.
Item de atributo de cookie
Atualmente, existem 2 versões de cookies, versão 0 e versão 1. Eles têm 2 tipos de identificadores de cabeçalho de resposta, a saber, "Set-Cookie" e "Set-Cookie2".
Valor do atributo de cookie 0
Valor de atributo de cookie 1
Exemplo de usar cookies em java
@OverridePublic void Doget (solicitação httpServletRequest, httpServletResponse resposta) lança a ioexception {Response.setContentType ("text/html; charset = utf-8"); printWriter out = Response.getWriter (); cookie [] Cookies = Solicy.cokys; == NULL) {Response.addcookie (novo cookie ("Nome", "luoxn28"));} else {System.out.println (name);} out.println ("hello mundal"); (Cookie.getName (). Equals (key)) {return cookie.getValue ();}}} retorna null;}Algumas precauções para o uso de cookies (tomando o uso do Java como exemplo)
• O nome e o valor do cookie criados não podem ser caracteres não-atribuídos. Se for chinês, pode ser codificado através do rlencoder, caso contrário, uma exceção java.lang.illegalargumentException será lançada.
• Quando vários nomes e valores de valor aparecem, eles estão no mesmo cabeçalho "cookie".
• O valor dos cookies pode salvar marcas de pontuação além de ";". Mas os caracteres chineses não podem ser salvos. O lixo aparecerá ao salvar caracteres chineses.
Algumas restrições aos cookies
Um cookie é um campo no cabeçalho HTTP. O próprio HTTP não tem restrições nesse campo, mas os cookies são finalmente armazenados no navegador. Diferentes navegadores têm algumas restrições ao armazenamento de cookies, conforme mostrado na tabela a seguir:
Se você tentar armazenar mais biscoitos, os biscoitos mais antigos serão descartados.
2 sessão
A sessão resolve o problema de que, quando o número de cookies aumenta, a quantidade de transmissão de dados entre o cliente e o servidor é aumentada. Quando o mesmo cliente interage com o servidor, ele não precisa passar de volta todos os valores dos cookies todas as vezes, mas apenas um valor de identificação é transmitido de volta. Esse ID é gerado quando o cliente acessa o servidor pela primeira vez e cada cliente é único. Esse ID geralmente é um biscoito cujo nome é JSessionId.
Como funciona a sessão com base em cookies? Pode ser baseado no parâmetro do caminho da URL; Também pode ser baseado em cookies. Se o logotipo dos cookies no contêiner de contexto não for modificado, ele também será suportado por padrão. Quando o navegador não suporta a função de cookie, o navegador reescreve o sessão do usuário para o parâmetro URL solicitado pelo usuário. Seu método de entrega é como /caminho /servlet; nome = xxx; name2 = xxx2? Name3 = xxx3. SessionCookiename Se o item de configuração da sessão-config estiver configurado em web.xml, o atributo Nome no Cookie-Config é o valor deste SessionCiename. Se o item de configuração da sessão-config não estiver configurado, o padrão sessionCookienamejiushi "JSessionId". Observe que os cookies associados à sessão não são diferentes de outros cookies. Se o cliente também suportar cookies, o Tomcat ainda analisará o ID da sessão no cookie e substituirá o ID da sessão no URL.
Como funciona a sessão
Com o ID da sessão, o servidor pode criar um objeto HTTPSession. A primeira vez que você chama o método request.getSession (). Se não houver um objeto HTTPSession correspondente, um novo objeto será criado e adicionado ao contêiner de sessões do org.apache.catalina.manager será salvo. Gerenciar salva todos os ciclos de vida da sessão, a sessão expira e é reciclada, o servidor está fechado e a sessão é serializada no disco. Observe que um cliente corresponde a um objeto de sessão, que salva o valor da sessão que criamos.
O método StandardsSession chamado pelo request.getSession () sempre existirá, mesmo que a sessão associada a esse cliente tenha expirado. Se expirar, um novo será criado, mas o valor da sessão definido anteriormente será perdido.
3 Comparação de cookies e segurança da sessão
Os cookies passam os dados salvos do cliente para o servidor através do cabeçalho HTTP e, em seguida, do servidor para o cliente. Todos os dados são salvos no navegador do cliente. Esses dados podem ser acessados e os cookies podem até ser adicionados e modificados por meio de plug-ins. A segurança de todos os cookies é relativamente ruim. Em comparação, a sessão salva dados no lado do servidor, o que é muito mais seguro. Requer apenas um cookie para passar um ID de cookie de volta, portanto, a sessão é mais adequada para salvar a privacidade do usuário e dados importantes.
Estrutura de sessão distribuída
Em grandes aplicativos da Internet, o uso de cookies e sessões por si só não é viável, porque o uso de cookies pode resolver bem o problema de implantação distribuído dos aplicativos. Um grande sistema de aplicativos da Internet possui centenas de máquinas e muitos sistemas de aplicativos diferentes funcionam juntos. Como os cookies armazenam dados no navegador do usuário, toda vez que o usuário visita, os dados serão trazidos de volta ao servidor, que resolve o problema da inconsistência de cookies causada pelas solicitações do mesmo usuário que estão sendo processadas em diferentes servidores.
Como o aplicativo é um cluster, a sessão não pode ser salva na memória de cada servidor. Se cada servidor tiver centenas de milhares de usuários de acesso, a memória do servidor não poderá ser acomodada. Mesmo que possa ser acomodado, não pode garantir que a sessão seja sincronizada com outros servidores. Portanto, compartilhar essas sessões exige salvá -las em um cache distribuído especial, que pode ser lido e escrito a qualquer momento. O desempenho deve ser bom o suficiente para atender aos requisitos, como Memcache/Redis ou Tair Distribuído de código aberto da Taobao.
Pergunta repetida de envio do formulário
Existem muitos lugares no site que repetiram envios. Para evitar envios repetidos de formulários, é necessário identificar cada solicitação de acesso do usuário, para que cada solicitação de acesso seja exclusiva do servidor. Para identificar cada solicitação do usuário, um item de formulário oculto pode ser adicionado ao campo do formulário solicitado pelo usuário, e seu valor é um token exclusivo, como:
<form id = "form" method = "post"> ... <tipo de entrada = name oculto = "token" value = "xxx"/> </morm>
Um token exclusivo é gerado quando o usuário solicita o formulário e o define para a sessão do usuário. Quando o usuário envia, ele verifica se o token é consistente com o token salvo na sessão. Se for consistente, significa que não há envio repetido. Ao mesmo tempo, o token na sessão é atualizado para um novo valor de token; Caso contrário, o token enviado pelo usuário não é mais o token legal da solicitação atual e o envio falha.
O exposto acima são as coisas sobre cookies e sessões em Java que o editor apresentou a você. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!