• Cookie和session


    cookie和session的区别:

    1.cookie;
    cookie是保存在浏览器端的键值对,可以用来做用户认证
    2.session;
    将用户的会话信息保存在服务端,key值是随机产生的字符串,value值是session的内容
    依赖于cookie将每个用户的随机字符串保存到用户浏览器上.

    Django中session默认保存在数据库中:django_session表
    flask,session默认将加密的数据写在用户的cookie中 

      Cookie的原理

    1.客户端向服务端发送请求,第一次的值为空 cookie:{}
    2.服务端接受请求后,设置cookie,request.set_cookie(key,value,),随着响应发给浏览器
    3.客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie再发送给服务器
    当客户端向服务器发出请求时会把所有这个服务器Cookie包含在请求中发送给服务器,这样服务器就可以识别客户端了!


    如果想看到浏览器的Cookie可以点击浏览器的 锁 或者 感叹号


    设置Cookie
    # 1.设置cookie
    HttpResponse.set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=None, httponly=False)
    #参数:
        #key:    cookie的名称(*)
        #value:   cookie的值,默认是空字符
        #max_age:cookies的持续有效时间(以秒计),如果设置为 None,cookies 在浏览器关闭的时候就失效了。
        #expires:cookies的过期时间,格式:"Wdy, DD-Mth-YY HH:MM:SS GMT" 如果设置这个参数,它将覆盖max_age。
        #path:    cookie生效的路径前缀,浏览器只会把cookie回传给带有该路径的页面,这样你可以避免将cookie传给
                 站点中的其他的应用。/ 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问
        #domain:   cookie生效的站点。你可用这个参数来构造一个跨站cookie。如, domain=".example.com" 所构造的
                  cookie对下面这些站点都是可 读的: www.example.com 、 www2.example.com。
                  如果该参数设置为None,cookie只能由设置它的站点读取。
        #secure:   如果设置为 True ,浏览器将通过HTTPS来回传cookie。
        #httponly: 仅http传输   不能使用js获取cookie
    
    #同set_cookie,不同点在于设置salt,即加盐,加密存储cookie数据
    HttpResponse.set_signed_cookie(key, value, salt='', max_age=None, expires=None, path='/', domain=None, secure=None, httponly=False)
    
    

    获取Cookie

    #2 获取cookie
    HttpRequest.COOKIES.get(key)
    
    #获取加“盐”的cookie
    HttpRequest.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)

    删除Cookie

    # 3删除cookie 
    HttpResponse.delete_cookie(key, path='/', domain=None)


    Session

    Cookie弥补了HTTP无状态的不足,让服务器知道来的人是“谁”;但是Cookie本身保存在客户端,可能被拦截或窃取,自身安全性较差;
    而Session保存在服务器,有较高的安全性。
    所以我们就通过Cookie识别不同的用户,对应的在Session里保存私密的信息
    session的特性:
    Session是服务器端技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,
    由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,
    当用户再去访问该服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。

    Session配置

    首先在settings.py中有如下配置(系统默认),

    INSTALLED_APPS = [
        'django.contrib.sessions',
    ]
    MIDDLEWARE = [
        'django.contrib.sessions.middleware.SessionMiddleware',
    ]

    session操作

    def doregister(request):
        username = request.POST.get('username')
        password = request.POST.get('password')
        email = request.POST.get('email')
        user = User()
        user.username = username
        user.password = md5(password.encode('utf8')).hexdigest()
        user.email = email
        user.save()
        # 设置session
        request.session['username'] = username
        return render(request,"common/notice.html",context={
            'code':1,
            'msg':'注册成功',
            'url':'three:index',
            'wait':3
        })

    获取Session

    def index(request):
        # session获取 
        username = request.session.get('username')
        return render(request,'three/index.html',context={'username':username})

    删除Session

    def logout(request):
        request.session.flush()
        return redirect(reverse("three:index"))

    #clear() 清空所有session 但是不会将session表中的数据删除

    #flush() 清空所有 并删除表中的数据

    #logout() 退出登录 清除所有 并删除表中的数据

    #del req.session[‘key’] 删除某一个session的值

    Session常用操作

    1.设置session: request.session["is_login"]="1"
        2.获取session: request.session.get(""is_login")
        3.只删除session数据  request.session.delete()
        4.删除session数据和cookie request.session.flush()
        5.设置会话Session和Cookie的超时时间
            request.session.set_expiry(value) 
            * 如果value是个整数,session会在些秒数后失效。 cookie值消失
            * 如果value是个datatime或timedelta,session就会在这个时间后失效。
            * 如果value是0,用户关闭浏览器session就会失效。
            * 如果value是None,session会依赖全局session失效策略。
       6.在setting中添加
          SESSION_SAVE_EVERY_REQUEST =True  每次请求都保存Session设置后,如果存在数据库中,需要迁移数据库
     
     
  • 相关阅读:
    HBA登录验证
    html转pdf
    html转pdf
    html转word
    python生成html
    python生成pdf
    Word另存为不同的格式
    WORD转HTML-python第三方包Mammoth(官方文档翻译)
    深入浅谈,CPU设计原理
    CPU,寄存器,缓存,RAM,ROM的作用和他们之间的联系
  • 原文地址:https://www.cnblogs.com/love2000/p/11797505.html
Copyright © 2020-2023  润新知