• 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

  • 相关阅读:
    任正非:所有公司都是管理第一,技术第二(没有一流管理,领先的技术就会退化;有一流管理,即使技术二流也会进步)
    QuickReport的OnNeedData的触发情况
    Quickreport不用数据字段,如何实现多页打印?
    我要继续做开发吗(对18个问题,全部都是肯定!)
    一台主机,至多可以开启多少个线程
    BenchmarkDotNet
    开发资源
    WebSocket
    TCP
    “在什么时候学习编程才合适?”
  • 原文地址:https://www.cnblogs.com/qeqexiaomu/p/11094881.html
Copyright © 2020-2023  润新知