zoukankan      html  css  js  c++  java
  • Cookie与Session

     
     
    一、Cookie

    Cookie的由来:
    由于HTTP是无状态的,浏览器的每次请求对于服务端来说都是全新的,而在某种特定的情况下,我们需要浏览器保持当前的某种状态,因此就产生了Cooke。
     
    先来介绍一下Cookie:
    Cookie是服务器发送出来存储到浏览器中的一组组键值对,浏览器再次访问该该服务器时,会自动携带这些键值对,以便服务器从中提取有用的信息,而服务器也可以通过这些键值对来判断不同的用户。
     
    Cookie的使用:
    1.设置Cookie
    from django.shortcus import HttpResponse, render, redirect
    response = HttpResponse(...)
    response = render(...)
    response = redirect(...)
    response.set_cookie(key, value, ...)
    response.set_signed_cookie(key, value, salt='..', ..)    # 设置签名cookie
    其它参数:
        max_age = None,    # 超时时间,单位是s
        expires = None,    # 超时时间,datetime格式
        path = '/',        # 生效的路径
        domain = None,     # Cookie生效的域名
        secure = False,    # https传输
        httponly = False,  # 只能http传输,无法被JS获取(除抓包)
     
    2.获取Cookie的value:
    request.COOKIES[key]
    request.get_signed_cookie(key, default=RAISE_ERROR, salt='..', max_age=None)
     
    3.删除Cookie:
    rep.delete_cookie(key)
     
    4.Cookie版登陆校验:
    def check_login(func):
        @wraps(func)
        def inner(request, *args, **kwargs):
            next_url = request.get_full_path()
            if request.get_signed_cookie("login", salt="SSS", default=None) == "yes":
                # 已经登录的用户...
                return func(request, *args, **kwargs)
            else:
                # 没有登录的用户,跳转刚到登录页面
                return redirect("/login/?next={}".format(next_url))    #加这个的原因在于让登陆页面获取到它的值,然后在登陆成功之后,就自动跳转到先前登陆的页面
        return inner
     
    def login(request):
        if request.method == "POST":
            username = request.POST.get("username")
            passwd = request.POST.get("password")
            if username == "xxx" and passwd == "dashabi":
                next_url = request.GET.get("next")
                if next_url and next_url != "/logout/":
                    response = redirect(next_url)
                else:
                    response = redirect("/class_list/")
                response.set_signed_cookie("login", "yes", salt="SSS")    # 设置cookie
                return response
        return render(request, "login.html")
     
    @check_login
    def index(request):
        return render(request, 'index.html')
     
     
     
    二、Session

    Session的由来:
    虽然Cookie的出现解决了HTTP请求无状态的问题,但Cookie本身有两个缺陷:a. Cookie本身最大支持4096个字节;b. Cookie保存在客户端的浏览器上,容易被拦截或窃取,不安全。在这种情况下Session就出现了。
     
    Session的介绍:
    Session和Cookie本质上是共通的,只是Session中的key(自动生成的字符串)作为浏览器中Cookie的value保存在本地,而Session中的key(自动生成的字符串)和value(自定义格式存储的用户信息,如user)则以字典形式保存在服务器的数据库中。
    而Session依赖于Cookie,当Django用到Session时,数据库中的key就会随机生成一段字符串,保存到浏览器Cookie的value中,而这段字符串是Session用来寻找用户信息(value)的唯一标识。
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    配置码云git自动更新的webhook
    PHP如何像javabean一样get+字段名方式取值
    magento信用金额支付插件开发
    JAVASCRIPT localeCompare函数运用
    利用innodb_force_recovery 解决WAMP MySQL服务器无法正常启动的问题
    android回收AnimationDrawable动画的每一帧的图片资源,而释放内存
    MySQL 性能优化 30个数据库设计的最佳实践
    mydumper 快速高效备份mysql,按照表生成备份文件,快速恢复
    MySQL 5.6查询优化器新特性的“BUG” eq_range_index_dive_limit
    Mysql Innodb 引擎优化-内存、日志、IO、其他相关参数
  • 原文地址:https://www.cnblogs.com/changwoo/p/9568519.html
Copyright © 2011-2022 走看看