一、Cookie介绍
Cookie是什么?
- Cookie是由服务器生成的,存储在浏览器端的少量数据(键值对)
- 服务器生成Cookie后,会在响应请求时发送Cookie数据给浏览器,浏览器接收到后会自动保存
- 浏览器再次请求服务器时,会自动上传该服务器生成的所有的Cookie
- Cookie是有过期时间的,默认关闭浏览器之后Cookie就会过期
- 每个域名下保存的Cookie的个数是有限制的,不同浏览器保存的个数不一样;
每个Cookie保存的数据大小是有限制的,不同的浏览器保存的数据大小不一样;
Cookie是基于域名安全的:
- Cookie的存储是以域名的方式进行区分的;
- 每个网站只能读取自己生成的Cookie,而无法读取其它网站生成的Cookie;
- 浏览器请求某个网站时,会自动携带该网站所有的Cookie数据给服务器,但不会携带其它网站生成的Cookie数据。
Cookie的应用:
- 记录用户的登录状态
- 浏览过哪些商品
二、Cookie操作:
读取数据
request.COOKIE['count']
保存数据
response.set_cookie('count', count,max_age, expires)
- max_age是一个整数,表示在指定秒数后过期
- expires是一个datetime或timedelta对象,会话将在这个指定的日期/时间过期
- max_age与expires二选一
- 如果不指定过期时间,在关闭浏览器时cookie会过期
三、案例--通过cookie保存自增状态
需求:
当请求url地址
http://127.0.0.1:8000/cookie/
时,显示如下图界面点击按钮时,数值实现自增: 客户端通过get请求服务器,服务器从cookie中读取'count'的值,自增后,返回给客户端进行显示
- 当关闭浏览器再打开时,能够接着上一次的值实现自增(状态保存)
- 通过cookie方式实现
实现步骤:
- 配置请求的url地址
- 创建视图函数
- 创建html界面
- 服务器自增提供服务:定义 自增请求的url 和 自增视图函数
- 实现自增效果:在html界面中,点击自增按钮时,使用ajax请求
/do_increment_cookie/
地址,服务器返回自增后的值,界面再显示出来 - 显示上一次的值: 进入html界面时,服务器要读取cookie中‘count’的值,并在html界面显示出来
Session
一、Session介绍
一些重要敏感的数据(银行卡账户,密码,验证码),应该存储在服务器端,而不是存储在浏览器,这种在服务器端进行状态数据保存的方案就是Session
Session的使用依赖于Cookie,如果浏览器不能保存Cookie,那么Session则失效了
django项目有session模块,默认开启session功能,会自动存储session数据到数据库表中
Session也是有过期时间的,如果不指定,默认两周就会过期
Session数据(键值对)存储原理:
二、Session的使用
开启session功能
在django项目中,session功能默认是开启的;要禁用session功能,则可禁用下图中的session中间件:
session对象操作(request.session字典)
保存session数据(键值对)
request.session['键']=值
读取session数据
request.session.get('键',默认值)
清除session数据(清空值)
request.session.clear()
删除会话中的指定键及值,在存储中只删除某个键及对应的值。
del request.session['键']
设置会话的超时时间,如果没有指定过期时间则两个星期后过期。
- 如果value是一个整数,会话将在value秒没有活动后过期。
- 如果value为0,那么用户会话的Cookie将在用户的浏览器关闭时过期。
如果value为None,那么会话永不过期。
request.session.set_expiry(value)
案例--通过session保存自增状态
需求:
当请求url地址
http://127.0.0.1:8000/session/
时,显示如下图界面点击按钮时,数值实现自增: 客户端通过get请求服务器,服务器从session中读取'count'的值,自增后,返回给客户端进行显示
- 当关闭浏览器再打开时,能够接着上一次的值实现自增(状态保存)
- 通过session方式实现
实现步骤:
- 配置请求的url地址
- 创建视图函数
- 创建html界面(复制前面自增例子的html稍作修改)
- 服务器自增提供服务:定义 自增请求的url 和 自增视图函数
- 实现自增效果:在html界面中,点击自增按钮时,使用ajax请求
/do_increment_session/
地址,服务器返回自增后的值给界面再显示出来 - 显示上一次的值: 进入html界面时,服务器要读取session中‘count’的值,并在html界面显示出来
三、session存储方式
Session数据可以存储在数据库、内存、Redis等,可以通过在项目的setting.py中设置SESSION_ENGINE项,指定Session数据存储的方式。
存储在数据库中,如下设置可以写,也可以不写,这是默认存储方式。
SESSION_ENGINE='django.contrib.sessions.backends.db'
存储在内存中:存储在本机内存中,如果丢失则不能找回,比数据库的方式读写更快
SESSION_ENGINE='django.contrib.sessions.backends.cache'
混合存储:优先从本机内存中存取,如果没有则从数据库中存取。
SESSION_ENGINE='django.contrib.sessions.backends.cached_db'
通过Redis存储session