Django中cookie和session

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

  1. 下定义:保存在浏览器端的键值对

    1. 用处:

    2. 登录

    3. 记住密码/7天免登录

    4. 用户浏览习惯(每页显示10条)

    5. 简单的投票限制

    6. Django操作Cookie

    7. 设置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

原文地址:https://www.cnblogs.com/qeqexiaomu/p/11094881.html