Django中cookie和session
Cookie可以翻译为“小甜品,小饼干” ,Cookie 在网络系统中几乎无处不在,当我们浏览以前访问过的网站时,网页中可能会出现 :你好 .xx,
Cookie其实是客户端记录用户行为的一个文件,形式通常是键值对的方式,大家可能有过这种经历,登录网站有的浏览器会提示,是否保存
Cookie
cookies是指某些网站为了辨别用户身份、进行session跟踪 而储存在用户本地终端上的数据(通常经过加密)。cookie大致上分为两种,分别是会话cookie和持久化cookie。
session是存储在服务端的,获取方式:通过cookie里的session id(通过服务器生成)获取,而session是存放在服务器的内存中的,所以session的数据不断增加会造成服务器的负担,所以只会把很重要的信息存储在session中,而把一些次要的东西存储在客户端的cookie中。会话cookie是存放在客户端浏览器的内存中,他的生命周期和浏览器是一致的,当浏览器关闭会话cookie也就消失了,而持久化cookie是存放在客户端硬盘中,持久化cookie的生命周期是我们在设置cookie时候设置的那个保存时间。
Cookie
-
下定义:保存在浏览器端的键值对
-
用处:
-
登录
-
记住密码/7天免登录
-
用户浏览习惯(每页显示10条)
-
简单的投票限制
-
Django操作Cookie
-
设置Cookiereq = HttpResponse("OK")req.set_cookie("key", "value")
设置加盐的cookie
req.set_signed_cookie("key", "value", salt="shanghais1hao", max_age=秒)
-
2. 获取Cookie
request.COOKIES --> 大字典
request.COOKIES["key"]
request.COOKIES.get("key", "")
# 获取加盐的Cookie
request.get_signed_cookie("key", default="", salt="shanghais1hao")
3. 删除Coookie
req.delete_cookie("key")
Session
1. 下定义:
保存在服务端的键值对,依赖于Cookie
2. 用处:
1. 登录
2. 保存手机验证码/验证码
3. 保存购物车数据
...
3. Django操作Session
1. 设置Session
1. request.session["key"] = "value"
2. request.session.set_expiry(秒/日期对象/时间间隔对象/0/None)
3. request.session.setdefault("k1", "v1")
2. 获取Session数据
1. request.session.get("k1", "")
2. request.session["k1"]
3. request.session.keys()
4. request.session.values()
5. request.session.items()
6. request.session.iterkeys()
7. request.session.itervalues()
8. request.session.iteritems()
3. 删除Session
1. request.session.flush()多用于注销
2. request.session.delete()
4. 手动清除早已经过期的session数据
request.session.clear_expired()
5. 相关配置项(写在settings.py中的)
1.每次请求都更新Session失效时间
SESSION_SAVE_EVERY_REQUEST = True
2. SESSION_COOKIE_AGE = 1209600 # 设置Cookie超时时间
3. SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key
4. 其他:
SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径(默认)
SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名(默认)
SESSION_COOKIE_SECURE = False # 是否Https传输cookie(默认)
SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输(默认)
session id的作用
当客户端第一次请求session时,服务器端会为客户端创建一个session对象,并且生成一个session id(通过一些加密算法)。然后保存在cookie中。当用户再次登录时,客户端通过cookie,将session id传到服务器,去和服务器中的session id进行对比,寻找这个session 。然后根据查找结果执行对应的操作。
登录过程
id被盗可能导致的问题
因为session Id是保存在cookie中,而cookie是存在于客户端,所以session Id 并不安全
如何避免
1.敏感操作需要用户输入密码来进行二次认证
2.网站https化,提高消息传递过程中的安全系数
3.用户使用一个密匙对参数进行hash,这样即使cookie被盗取,也会因为没有密匙而无法获取session id