一、Cookie
1.Cookie的介绍
Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而存储在用户本地终端上的数据(通常经过加密)
Cookie最早是网景公司的前雇员Lou Montulli在1993年3月的发明。Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,这样服务器可以知道该用户是否是合法用户以及是否需要重新登录等。服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型记住用户名。
Cookie是存在在浏览器中的一段纯文本信息,建议不要存储敏感信息。
流程:
- 1.当用户第一次登录的时候
- 2.服务器端会返回给用户浏览器一个cookie
- 3.下次再登录时浏览器会自动携带cookie来访问服务器
- 4.服务器收到cookie后进行验证处理
- 5.最后返回给浏览器端
2.Cookie的特点
- Cookie以键值对Key-Value的形式进行信息的存储
- Cookie基于域名安全,不同域名的Cookie的是不能相互访问的。
3.设置Cookie
可以通过HttpResponse对象中的set_cookie方法来设置cookie。
HttpResponse.set_cookie(cookie名,value=cookie值,max_age=cookie有效期)
- max_age单位为秒,默认为None,如果是临时的Cookie,可以设置为None
4.读取Cookie
可以通过HttpRequqest对象的COOKIES属性来读取本次请求携带的cookie值。request.COOKIES是字典类型。
request.COOKIES["cookie名"]
5.删除cookie
可以通过HttpResponse对象的delete_cookie(k)方法来删除cookie
HttpResponse.delete_cookie("cookie名")
二、Session
1.Session的介绍
Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。
流程:
- 1.用户浏览器发送带有用户名和密码的post请求
- 2.服务器收到请求后将用户对象存储在session中,seesion存储在内存中
- 3.服务器将sessionid存在cookie中一同返回给浏览器
- 4.下次浏览器访问的时候把带有sessionid的cookie发送给服务器时
- 5.服务器会根据sessionid来验证查找session
- 6.最后返回给浏览器端
2.Session的作用
Session的作用就是它在Web服务器上保持用户的状态信息供在任何时间从任何设备上的页面进行访问。因为浏览器不需要存储这种信息,所以可以使用任何浏览器。保持会话状态。
3.Session的特点
- 1.依赖cookie
- 2.可以存储敏感、重要的信息,安全
- 3.长度没有限制
- 4.Session共享问题
4.Session的配置和存储
-
1.启用Session
Django默认是启用Session的。可以在settings.py文件中的MIDDLEWARE列表中查看,如需禁用,注释掉就可以。
-
2.存储方式
在settings.py文件哄,可以设置session数据的存储方式,可以保存在数据库、本地缓存等。
-
2.1数据库
默认就是存储在数据库中
SESSION_ENGINE='django.contrib.sessions.backends.db'
- 操作Session包括三个数据:键、值、过期时间
-
2.2本地缓存
存储在本机的内存中,如果丢失则不能找回,但是比数据库的读写方式更快一些。
SESSION_ENGINE='django.contrib.sessions.backends.cache'
-
2.3混合存储
优先从本机存取,如果没有则从数据库中存取
SESSION_ENGINE='django.contrib.sessions.backends.cached_db'
-
2.4 Redis
在Redis中保存session,需要引入第三方包,我们可以使用django-redis来解决。
1)安装包
# 一定是在虚拟环境中 pip3 install django-redis
2)配置
在settings.py文件中做如下设置
CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/1", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } } } SESSION_ENGINE = "django.contrib.sessions.backends.cache" SESSION_CACHE_ALIAS = "default"
5.Session的操作
通过HttpRequest对象的session属性进行会话的读写操作
1)以键值对的格式写session
requqest.session["key"]=value
2)根据键来读取值的内容
request.session.get("key",默认值)
3)清除所有session中的值部分
request.session.clear()
4)清除某个键及其对应的值
del request.session["key"]
5)清楚session整条数据
request.session.flush()
6)设置session的有效期
request.session.set_expiry(value)
# value是个整数,session会在value秒没有活动后过期
# value是0,则会在关闭浏览器后过期
# valueNone,则默认是两周后过期
三、Cookie和Session的对比
Cookie
1.Cookie是用来缓存和保持会话状态的
2.缺点是存储长度有限(4KB),并且不太安全,建议不要存敏感信息
3.Cookie存储在浏览器中
Session
1.Session也是用来缓存和保持会话状态的
2.优点是存储长度不限,安全
3.缺点Session需要依赖Cookie,并且存在Session共享问题
4.Session存储在服务器中,可以存储在服务器,缓存中。