I. Introdução
Este blog para falar sobre Web
aplicações amplamente utilizadas Cookie
, Session
bem como Token
mecanismos, eles Web
desempenham um papel vital na aplicação, mas também os locais de teste de alta frequência na entrevista. Este blog I principalmente introduzir os conceitos e princípios dessas três coisas são implementadas, e as diferenças entre eles.
Em segundo lugar, o texto
2.1 Por que eles são necessários
Em primeiro lugar a primeira pergunta, por que precisamos essas três coisas? Muito pouca compreensão HTTP
deve estar ciente de que HTTP
o protocolo é um protocolo sem estado. O que é apátrida? Ou seja, HTTP
o servidor para cada solicitação da mesma forma, não registra o estado de cada pedido, como quem é emitido, todas as solicitações é alheio a ele. Mesmo se você enviar dois pedidos sucessivos para o mesmo servidor, é, e isso é dois pedidos completamente alheios. No entanto, vamos encontrar um tal fenômeno, quando logar em um site, o servidor parecia a conhecer-nos, nós enviou um pedido, podemos obter uma resposta associada com a nossa. Por exemplo, nós Taobao Após o login, clique no carrinho de compras, será capaz de ver os nossos próprios produtos adicionados, e se não entrar, ele será bloqueado, saltar para a página de login. Por que isso? Não quer dizer HTTP
é apátrida-lo. Na verdade, isso depende de três mecanismos acima.
2.2 Cookies
Cookie
Na verdade, alguns dos dados de texto armazenados no navegador do computador, que é key-value
o formulário, que contém algumas informações de nossa própria, bem como servidores. Quando enviar um pedido a um servidor, o servidor pode querer-nos para armazenar alguns dados localmente, desta vez juntos será no cabeçalho de um nome de pacote de resposta é Set-Cookie
(ou Set-Cookie2
, dependendo da versão) linha de cabeçalho, seguido por navegar esperança ele é armazenado nos dados locais. Navegador recebe o pacote de resposta, em que os encontrados set-Cookie
campos, os dados contidos nele serão armazenados no computador, mas também gravar o endereço do servidor. Que esses dados que serve? Quando ao enviar um pedido ao servidor, tais Cookie
vai juntamente com a mensagem de solicitação para o servidor, o servidor recebe os dados Cookie
de dados, a fim de ser capaz de identificar o pedido de transmissão de corrente que é um cliente, ou podem ser identificados o cliente, a fim de dar uma resposta correspondente à operação. Este processo é mostrado a seguir:
Desde Cookie
é salvo em um arquivo local, então ele pode ser armazenado por longos períodos só precisa definir o tempo de expiração mais longo. Há também de notar que, devido Cookie
ao local, por isso é realmente um armazenamento de dados não segura, permitindo assim que o navegador do cliente desativada Cookie
. Além disso, a Cookie
capacidade de poupar o tamanho dos dados é também limitada, único biscoito não pode exceder os dados armazenados 4K
.
2.3 Sessão
Session
A tradução chinesa é chamado: a sessão, indicando que ele é um cliente de conversa e o servidor. E Cookie
não é o mesmo, Session
são mantidos pelo servidor. Quando um cliente envia uma solicitação para o servidor, o servidor será criado para iniciar o cliente a pedido de um objeto e é armazenado em um conjunto de servidores, gerando um único SessionId
para identificar o objeto, mas sobre as informações do usuário atual pode ser armazenada neste objeto. Quando o servidor envia uma mensagem de resposta ao utilizador, será SessionId
colocado no pacote de resposta Set-Cookie
de cabeçalho, o utilizador recebe o pacote de resposta, quando o detectado Set-Cookie
linha de cabeçalho, contidos no mesmo SessionId
está armazenado localmente. A próxima vez que o cliente envia uma solicitação para o servidor, SessionId
a partir da Cookie
leitura, e enviada para o servidor. Servidor detectado SessionId
após o armazenamento Session
para encontrar este objeto de coleção SessionId
correspondente ao objeto, para obter informações sobre o usuário. Os usos mais comuns é que os usuários fazem login: Quando um usuário faz logon, o servidor Session
identidade armazenar informações do usuário, tais como userId
. Depois de receber uma solicitação do usuário, consulta Session
objetos, se contendo userId
, indica que o usuário logado, e pode ser adquirido pelo userId
usuário consulta de dados privados. O servidor não tem de manter Session
, ele vai sair do usuário do navegador, ou não depois de receber a solicitação do usuário, será por algum tempo Session
para limpar.
No entanto, Session
existem alguns problemas, como para cada usuário, o servidor precisa manter um ou mais Session
, se um grande número de usuários para acessar o servidor ao longo do tempo, fará com que as necessidades do servidor para manter um grande número de Session
objetos, pegada sério. Além disso, de hoje Web
servidores, adotaram o cluster de tecnologia, o cluster cada servidor Session
é independente, para atingir Session
share é uma tarefa mais difícil. Finalmente, um outro ponto, o navegador pode ser desativado Cookie
neste momento SessionId
não será armazenada em Cookie
, desta vez o navegador é a prática geral em URL
colocar em SessionId
, por isso antes de o usuário não fechar a página, esta SessionId
não será perdido.
2.4 token
Token
O papel principal é fazer de usuário de autenticação , geralmente chamá-lo: token. Quando logon em um site, digite a senha da conta enviada para o servidor. Neste ponto, o servidor para consultar o banco de dados para verificar a senha da conta, se a autenticação for bem sucedida, o servidor de acordo com um algoritmo de criptografia especial para calcular um Token
(cadeia de caracteres), enviá-lo para o cliente, e informações de identidade do usuário também é enviado no passado, tais como userId
. Depois de receber a resposta, ele será Token
armazenado na Cookie
memória ou local, um pedido de novo Token
, e userId
enviado para o servidor. Quando o servidor recebe um pedido, de acordo com as informações relevantes do cliente, recálculo Token
, se o novo Token
valor é enviado para o cliente com Token
o mesmo, antes que o usuário foi validado indica, o servidor pode obter dados diretamente.
E eu não estou me sentindo Session
um pouco semelhante, mas na verdade a diferença é muito grande. computação de servidor Token
valores precisam usar as informações do usuário pessoais (como cliente mac地址
), eo próprio servidor de chaves único conhecido, que também garante que Token
para cada cliente é único, e porque somente própria chave do servidor você sabe, por isso, os hackers não podem simular a computação servidor Token
valor, em seguida, enviar pedidos falsos. Enquanto o servidor detecta um erro Token
, ele não permitirá que o pedido do cliente, mas requer o cliente para autenticar. Além disso, para cada solicitação, o servidor não precisa de como Session
a mesma, senão a identidade do cliente, é necessário calcular um tempo Token
pode ser comparado, isto é, ele não quebrar HTTP
apatridia.
No entanto, isso também significa que Token
uma vez que são interceptadas por terceiros, o outro lado pode usar a sua identidade, faz uma solicitação para o servidor. Então, Token
ele é geralmente baseada em HTTPS
uso, em vez de inseguro HTTP
de usar. Também armazenado no processamento de criptografia local vai ser levada a cabo em conformidade.
A diferença entre os três 2.5
A diferença entre (1) Session e Cookie
- Segurança:
Session
mais deCookie
segurança,Session
é armazenado no lado do servidor, você pode ver apenas o seu próprio servidorSession
de armazenamento de dados, masCookie
é na memória do cliente, de fácil leitura ilegalmente. - Valores de diferentes tipos de acesso :
Cookie
os dados armazenados em um arquivo de texto, por isso só permite que os dados cadeia armazenada, pretende definir outros tipos de dados necessários para convertê-lo para uma cadeia,Session
podem ser armazenados em qualquer tipo de dados, porque ele é armazenado em um servidor memória, essencialmente um objeto. - validade diferente:
Cookie
pode ser definido por longos períodos, como muitas vezes usamos a função de login padrão,Session
a falha geral de um curto período de tempo, o fechamento do cliente (padrão) ouSession
tempo limite irá falhar. - Diferentes tamanhos de armazenamento: únicos
Cookie
dados guardados não pode exceder4K
,Session
ele pode ser muito maior do que os dados armazenadosCookie
, mas quando o servidorSession
é muito grande, ele vai ocupar muito os recursos do servidor, fazendo com que o servidor para executar lentamente.
(1) a diferença entre a sessão e Token
Session
E Token
, de fato, são essencialmente diferentes, eles não são usados na mesma coisa. Session
O papel principal é cliente armazenar informações de sessão e o servidor, que é necessidades do servidor para saber informações sobre o atual cliente solicitante, por isso mantém uma recolha, armazenamento Session
objeto que contém as informações do cliente. Mas, Session
este mecanismo também pode ser usado para a verificação, desde que o servidor tem um cliente atual Session
, e que contém as informações relevantes, o servidor que os clientes atuais têm sido verificados.
No entanto Token
, ele não requer o servidor para manter o estado do cliente, seu papel é apenas para cliente envia uma solicitação para fazer a verificação, para evitar alguns ataques de rede. Apenas autenticado solicitação do cliente, o servidor dará a resposta, caso contrário, eles serão obrigados a verificar-lo. Além disso, Token
a autenticação em segurança do que Session
. Os dois não estão em conflito, podemos usar o servidor Token
para o cliente para verificação e, em seguida, usar a Session
salvar as informações da sessão.
Em terceiro lugar, o resumo
No rosto Cookie
, Session
e Token
fez uma introdução geral, eu acredito que após a leitura, estas três pessoas podem ter uma compreensão geral, mas eles querem estudar realmente em profundidade o mecanismo de princípios e implementação, logo acima do conteúdo é completamente não é suficiente, nós também precisamos aprender informações mais específicas.