zoukankan      html  css  js  c++  java
  • Django—cookie与session

    Cookie

    什么是Cookie

    就是曲奇。(雾)

    HTTP协议本身是无状态的。什么是无状态呢,即服务器无法判断用户身份。Cookie实际上是一小段的文本信息(key-value格式)。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。

    简单来说:cookie就是保存在客户端浏览器上的键值对

    Django操作cookie

    设置cookie
    obj1 = HttpResponse()
    #obj1也可以是render或者redirect实例化出的对象,只要是HttpResponse对象即可
    obj1.set_cookie()
    
    获取
    request.COOKIES.get()
    
    删除
    obj1.delete_cookie()
    
    
    
    三个页面,biskit,home,login
    
    login页面只有在登陆成功后在cookie中设置user键值对
    biskit页面进入时校验cookie中有无user键,如没有,则重定向到login页面并且在url中设置保存用户访问状态的键值对。如有user键则校验成功,显示信息
    
    
    def biskit(request):
        print(request.COOKIES)
        if request.COOKIES.get('user'): #COOKIE中有user表示用户状态为登陆成功
            return render(request,'biskit.html')
        else: #如没有,重定向到login页面并且在url中设置保存 next=用户访问状态的键值对
            path=request.path_info
            return redirect(f'/app01/login/?next={path}')
    
    
    def login(request):
        print(request.COOKIES)
        if request.POST.get('username')=='jojo' and request.POST.get('password')=='123':
            #判断url中有无next键值对
            next_path=request.GET.get('next')
            if next_path: #如有,在登陆成功后跳转回去
                obj=redirect(next_path)
            else:#如没有 则跳转到home页面
                obj=redirect('/app01/home/')
    
            obj.set_cookie('user','jojo') # 登陆成功后在cookie中设置user键值对
            return obj #返回Httpresponse对象
    
        return render(request,'login.html') #如是正常先访问的登陆页面,那就正常显示登陆页面
    
    def home(request):
        return HttpResponse(b'home')
    
    
    
    #######注意#######
    在测试中发现,只要执行到obj=redirect... 就会清空掉目前obj这个HttpResponse对象中的所有cookie,所以set_cookie放在return之前设置最最保险
    
    

    Session

    什么是Session

    session和cookie的作用有点类似,都是为了存储用户相关的信息。不同的是,cookie是存储在本地浏览器,而session存储在服务器。存储在服务器的数据会更加的安全,不容易被窃取。但存储在服务器也有一定的弊端,就是会占用服务器的资源,但现在服务器已经发展至今,一些的session信息还是绰绰有余的。

    简单来说:session就是保存在服务器上的键值对

    Django操作session

    Django的session会保存在数据库种的django_session表中。

    def set_session(request):
        if request.COOKIES.get('user'):
            request.session['username']=request.COOKIES.get('user')
            return HttpResponse(b'session seted')
        else:
            path=request.path_info
            return redirect(f'/app01/login/?next={path}')
    
    def get_session(request):
        print(request.session.get('username'))
        return HttpResponse(request.session.get('username'))
    
    
    
  • 相关阅读:
    java对象和json对象之间互相转换
    SVN使用教程总结
    JVM调优总结-调优方法
    tomcat 高并发配置 与优化
    redis的主从复制配置
    Java实现Redis持久化到数据库的关键方法
    java操作redis
    SSO系统的实现
    jedisClient操作redis实现增删改查功能
    get与post
  • 原文地址:https://www.cnblogs.com/Sheppard/p/11773152.html
Copyright © 2011-2022 走看看