Django cookie与session
cookie与session关系
cookie 是保存在客户端浏览器的键值对,浏览器发送请求时候会自动携带。 session 1、生成随机字符串
2、回给浏览器,让它写到cookie # {"sessionID":"234asd243dv35fd"}
3、自己保留一份,作为一个key,存到一个地方,key后面对应一个保存用户相关信息的键值
session-key session-data
234asd243dv35fd {"user":"alex"
概念
cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie因此诞生
cookie工作原理
用户在浏览器登录后,服务端根据用户的登录信息生成键值对(也就是cookie),保存用户的个人信息,然后将键值对返回给浏览器,浏览器保存在本地。当浏览器再次访问时,就会自动将这个键值对(cookie)带上,这样服务端就能通过cookie的内容判断这个用户是谁了。
cookie虽然在一定程度上解决了保持状态的需求,但由于cookie本身最大支持4096字节的数据,以及cookie本身是明文保存在客户端,很容易被拦截或窃取。因此就需要一种能够支持保存更多数据,并且保存在服务端,且具有较高安全性的机制,这就是session。
session工作原理
session是基于cookie工作的
- 用户登录后,服务端随机生成一个字符串,将这个随机字符串作为键值对(cookie)的value,而键值对的key则是由Django的session配置中自定义,默认情况下是sessionid,组成的cookie就{'sessionid':'xxxxxxxxxx'},服务端将这个cookie返回给浏览器,这样,浏览器本地只保存着一个随机字符串;
- 服务端再将第1步中生成的随机字符串做为key,由用户信息产生的字典做为value,组成一个键值对,保存在服务器端;假设随机字符串是"abc123",那组成的键值对理论上类似这样:{'abc123'{'login':true,'username':'jassin'}}
- 下次用户访问时,浏览器带着cookie,服务端根据cookie中的随机字符串就可以找到对应的用户信息了。
session的好处:浏览器端只存在一个随机字符串,避免用户信息被直接暴露在外。
from django.shortcuts import render
from app01 import models
def login(request):
# 记录日志
if request.method == 'GET':
pass
else:
user = request.POST.get('user')
pwd = request.POST.get('pwd')
obj = models.UserInfo.objects.filter(user=user,pwd=pwd).first()
if obj:
# 用户名和密码正确
"""
{
“xxxx的随机字符串”:{'id':1,'name':'jassin'},
“xx的随机字符串”:{'id':11},
} 表:
session_key value
xxxx的随机字符串 asfasdfasdfasdfwer2342fszdfsdfs 1. 生成随机字符串
2. 把随机字符串写到客户端浏览器cookie中
3. 在内存中大字典写入:
{
随机字符串: {'id':用户id}
}
"""
request.session['id'] = obj.id
request.session['name'] = obj.name else:
# 用户名和密码错误
pass
def home(request):
"""
:param request:
:return:
"""
"""
1. 获取客户端cookie中的随机字符串
2. 如果有:
则获取 key 对应的值
否则 返回None """
user_id = request.session.get('id') def temp(request):
data_list = {
'k1':'sf4sdf'
}
return render(request,'temp.html',data_list)
Django实现的cookie
获取Cookie
request.COOKIES['key']
request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
参数:
default: 默认值
salt: 加密盐
max_age: 后台控制过期时间
Django cookie与session的更多相关文章
- Python Web框架篇:Django cookie和session
part 1 概念 在Django里面,cookie和session都记录了客户端的某种状态,用来跟踪用户访问网站的整个回话. 两者最大的区别是cookie的信息是存放在浏览器客户端的,而sessio ...
- python Django cookie和session
在一个会话的多个请求中共享数据,这就是会话跟踪技术.例如在一个会话中的请求如下: 请求银行主页: 请求登录(请求参数是用户名和密码): 请求转账(请求参数与转账相关的数据): 请求信誉卡还款(请求参 ...
- falsk 与 django cookie和session存、取、删的区别
falsk cookie的存取删需导入from flask import Flask,make_response,request# 存COOKIE的方法@app.route('/setcookie') ...
- django cookie与session组件
本文目录 1 会话跟踪技术 2 cookie介绍 Django中操作Cookie Session Django中Session相关方法 Django中的Session配置 CBV中加装饰器 回到目录 ...
- Django - Cookie、Session、自定义分页和Django分页器
2. 今日内容 https://www.cnblogs.com/liwenzhou/p/8343243.html 1. Cookie和Session 1. Cookie 服务端: 1. 生成字符串 2 ...
- django cookie and session
cookie和session 1.cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie的工作 ...
- django cookie、session
Cookie.Session简介: Cookie.Session是一种会话跟踪技术,因为http请求都是无协议的,无法记录上一次请求的状态,所以需要cookie来完成会话跟踪,Seesion的底层是由 ...
- Django Cookie于Session
一.Cookie与Session由来 因为Http协议的特性,每一次来自用户浏览器的请求都是无状态且独立的,通俗地说,就是无法保存用户状态,后台服务器根本就不知道当前请求和以前及以后请求是否来自同一用 ...
- Django—Cookie and Session
一.Cookie Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份.进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密). 1. 应用 服务器可以利用Co ...
随机推荐
- jQuery图片垂直滚动焦点图
在线演示 本地下载
- 在非小细胞肺癌中,MET基因的14号外显子突变和年龄,依赖于癌症阶段的CNV,C-MET过表达的关系
背景:c-MET是肝细胞生长因子的酪氨酸激酶受体.MET 14号外显子编码部分c-MET的胞内跨膜结构域,包括重要的调节原件,比如酪氨酸1003,一个降解c-MET的相关酶的结合位点. 拥有MET 1 ...
- ActiveMQ 实现消息接收发送
一.接收者 package com.demo.initservice; import javax.jms.Connection; import javax.jms.ConnectionFactory; ...
- jedis客户端,取redis服务的值
package com.common.util; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; ...
- jQuery对象和dom对象的转换
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- hdu1596 find the safest road - floyd
2017-08-04 14:42:56 writer:pprp 题意: Problem Description XX星球有很多城市,每个城市之间有一条或多条飞行通道,但是并不是所有的路都是很安全的,每 ...
- java.util.logging.Logger_01
1.参考网址 1.1.java.util.logging.Logger使用详解 http://lavasoft.blog.51cto.com/62575/184492 1.2.Java内置Logger ...
- No mojo definitions
pom.xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</gro ...
- ubuntu14.04搭建Hadoop2.9.0伪分布式环境
本文主要参考 给力星的博文——Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04 一些准备工作的基本步骤和步骤具体说明本文不再列出,文章中提到的“见参考”均指以上 ...
- PhpStorm怎么用,PhpStorm常用快捷键教程
设置快捷键:File -> Settings -> IDE Settings -> Keymap -> 选择“Eclipse” -> 然后“Copy”一份 ->再个 ...