• 小谈Django中的Cookie


    cookie是服务器发出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对

    原理:

    由服务器产生内容,浏览器收到请求后保存在本地,当浏览器再次访问时,浏览器会自动带上cookie,这样服务器就能通过cookie的内容来判断是谁来了.

    获取cookie

    request.COOKIES['key']		# request.COOKIES.get('key')
    request.get_signed_cookie('key',default=RAISE_ERROR,salt='',max_age=None)
    

    设置cookie

    rep = HttpResponse(...)
    rep = render(request,...)
    rep指代response对象
    
    rep.set_cookie(key,value,...)
    rep.set_signed_cookie(key,value,salt='加密盐',...)
    

    参数:

    • key:键 value:值
    • max_age=None 超时时间
    • expires=None 超时时间(IE浏览器用的)
    • path='/' cookie生效的路径, / 表示根路径,特殊的: 根路径的cookie可以被任意的url访问
    • domain=None cookie生效的域名
    • secure=False https传输
    • httponly=False 只能http协议传输,无法被JavaScript获取(不绝对)

    删除cookie

    def logout(request):
    	rep = redirect("/login/")
    	# 删除用户浏览器之前设置的user的cookie的值
    	rep.delete_cookie("user")
    	return rep
    

    cookie版登录校验

    def login_required(func):
        def innner(request, *args, **kwargs):
            is_login = request.COOKIES.get('is_login')
            if is_login != '1':
                return redirect('/login/?returnUrl={}'.format(request.path_info))
            ret = func(request, *args, **kwargs)
            return ret
        return innner
    
    
    def login(request):
        if request.method == 'POST':
            username = request.POST.get('username')
            password = request.POST.get('password')
            if username == 'alex' and password == 'dsb':
                return_url = request.GET.get('returnUrl')
                ret = redirect(return_url if return_url else '/classes/')
                ret.set_cookie('is_login', '1')
                return ret
        return render(request, 'login.html')
    
  • 相关阅读:
    折半查找比较次数
    1139 First Contact PAT (Advanced Level)
    Asp.Net中修改扩展名的问题
    Asp.Net中前台Javascript与C#函数相互调方法
    Ajax应用场景简析
    C# 对象深拷贝、浅铐贝、直接拷贝
    string中的CopyonWrite技术
    同时区分IE6、IE7、FF三种浏览器的Hack
    在C#.net中将查询数据导入EXCEL表输出
    UpdatePanel控件使用详解(二)
  • 原文地址:https://www.cnblogs.com/richard_A/p/13805017.html
Copyright © 2020-2023  润新知