1. Compreensão simples
Sessão e cookie são dois objetos sob solicitação. Manipular seus valores é manipular o dicionário, e definir suas propriedades é chamar métodos.
O rastreamento de sessão é uma tecnologia comumente usada em programas da Web para rastrear toda a sessão do usuário. Os aplicativos da Web usam o protocolo HTTP para transferir dados. O protocolo HTTP é um protocolo sem estado. Assim que a troca de dados for concluída, a conexão entre o cliente e o servidor será encerrada e uma nova conexão precisará ser estabelecida para a troca de dados novamente. Isso significa que o servidor não pode rastrear a sessão a partir da conexão. Para resolver esse problema, as tecnologias de rastreamento de sessão comumente usadas são Cookie e Session. O cookie determina a identidade do usuário gravando informações no lado do cliente e o Session determina a identidade do usuário gravando as informações no lado do servidor.
Para usar a sessão no Django, você deve primeiro executar (o processo de criação de uma tabela):
python manage.py makemigrations
python manage.py migrate
二 、 sessão :
* Mecanismo de armazenamento de sessão :
(1) Quando um usuário visita o servidor, o servidor gera uma string aleatória;
(2) Quando o usuário efetua login com sucesso, {sessionID: random string} é organizado em pares de chave-valor e adicionado ao cookie Ele foi enviado ao usuário;
(3), o servidor para o cliente seqüência aleatória no cookie é enviado para fazer a chave, as informações do usuário para tornar o valor armazenado informações do usuário;
Portanto, o formato da sessão armazenada pelo servidor deve ser:
{sessionid: {'username': xx, 'password': yy}}
request.session ['username'] = 'xx'
gera um sessionid aleatório por padrão e implica a passagem O sessionID encontra a etapa de informação do usuário;
1. Definir valor (dicionário):
request.session['username'] = 'Genius淼'
request.session['password'] = 'genius123'
request.session.setdefault('username','password')#username 默认值为'password'
2. Defina os atributos :
request.session.set_expiry(value) -- 设置session过期时间,默认是两周。
value:
- 数字(单位:秒)
- datatime(具体日期)
- None(依据全局失效策略)
- timedelta(时间增量)
注意:request.session.set_expiry(timedelta(days=30))时要在setting中添加:SESSION_SERIALIZER='django.contrib.sessions.serializers.PickleSerializer'
3. Veja
request.session.keys()
request.session.values()
request.session.items()
4. Obtenha
request.session["username"] # 以字典形式读取,键不存在会报错
request.session.get("username") # 以get方法形式读取,键不存在会报错
request.session.get("username",None) # 加参,如果username不存在则读取到None
request.session.session_key # 用户session的随机字符串
5. Excluir
del request.session["username"] # 以字典形式删除
request.session.delete("username") # 以方法形式删除
request.session.delete('session_key') #删除所有session
request.session.clear() # 删除所有session
request.session.clear_expired() # 删除已失效session
Configurar sessão na configuração (transferência)
Local de armazenamento da sessão:
banco de dados (padrão) SESSION_ENGINE = 'sdjango.contrib.sessions.backends.db'
cache SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
arquivo SESSION_ENGINE = 'django.contrib.sessions.backends.file'
cache + Banco de dados SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'
cookie criptografado (equivalente a não usar nenhuma sessão e salvar informações confidenciais para o cliente) SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'
#sessionConfiguration FileSESSION_ENGINE
= 'django.contrib.sessions.backends.db' # Engine (padrão)
SESSION_FILE_PATH = caminho do arquivo # caminho do arquivo de cache, se for Nenhum, use o módulo tempfile para obter um endereço temporário tempfile.gettempdir ()
SESSION_COOKIE_NAME = "sessionid" # A chave quando o cookie de sessão é salvo no navegador, a saber: sessionid = string aleatória (padrão)
SESSION_COOKIE_PATH = "/" # Caminho para salvar o cookie da sessão (padrão)
SESSION_COOKIE_DOMAIN = Nenhum # O nome de domínio salvo pelo cookie de sessão (padrão)
SESSION_COOKIE_SECURE = False # Se o Https transmite cookies (padrão)
SESSION_COOKIE_HTTPONLY = True # Se o cookie de sessão suporta apenas transmissão http (padrão)
SESSION_COOKIE_AGE = 1209600 # Data de expiração do cookie da sessão (2 semanas) (padrão)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # Se deve fechar o navegador para fazer a sessão expirar (padrão)
SESSION_SAVE_EVERY_REQUEST = False # Se deseja salvar a sessão para cada solicitação, salve a sessão após a modificação padrão (padrão)
Três, cookie:
No django, o cookie é definido através do método set_cookie após um HttpResponse ser declarado. Ele salva cookies no cliente do navegador definindo pares de valores-chave no cabeçalho de resposta Set-Cookie.
res = HttpResponse() # 具体是什么响应要看自己的return
-
Definir valor (dicionário):
res.set_cookie('username','password') res.set_cookie('Genius淼','genius123')
-
Obtivermos
username = request.COOKIES.get('username')
-
excluir
res.delete_cookie('username')
-
Defina as propriedades :
visualize a classe HttpResponseBase:def set_cookie(self, key, value='', max_age=None, expires=None, path='/', domain=None, secure=False, httponly=False): ......
Parâmetros passáveis :
chave : o nome do
valor do cookie : o valor do cookie
max_age : tempo de expiração, unidade-segundo. O padrão é -1 ——> número negativo: fechar o navegador é inválido; 0 significa excluir o cookie.
expira : data de expiração, o mesmo que
caminho set_expiry da sessão : o caminho de uso do cookie, '/' significa que todos são permitidos. '/ index /' só pode ser acessado em / index, preste atenção ao último /
domínio : o nome de domínio que pode acessar o cookie, começando com '.', como'.baidu.com '
seguro : se o cookie é usado apenas Transmissão de protocolo seguro, o padrão é False. Ao usar https, secure deve ser definido como True
httponly : ele é restrito para obter pares de chave-valor no console do navegador, mas a ferramenta de captura de pacote não pode ser restrita.举例 : res.set_cookie (“idade”, “10”, max_age = “10”, expira = “2019-01-31”,)
-
Valor de configuração de criptografia : res.set_signed_cookie ('idade', '10', salt = “Eu sou secreto”)
Valor: request.get_signed_cookie ('idade', sal = “Eu sou secreto”) é
como adicionar uma cifra extra