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. 下定义: 保存在服务端的键值对,依赖于Cookie2. 用处: 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