• Django2 --- cookie


    1. 什么是cookie ?用途是什么?

    Cookies是一些存储在用户电脑上的小文件。它是被设计用来保存一些站点的用户数据,这样能够让服务器为这样的用户定制内容,后者页面代码能够获取到Cookie值然后发送给服务器。比如Cookie中存储了所在地理位置,以后每次进入地图就默认定位到改地点即可。

    2. 通过什么方式能获取到Cookie的内容,我能查看自己电脑上的Cookie吗?

    能通过Web Server或者客户端浏览器来获取到Cookie。多数浏览器能够配置允许用户访问Cookies,但是注意不同的站点之间的Cookie是不能共享的。打开Chrome的调试窗口可以在Resource的Cookie侧边栏查看,或者在console中输入document.cookie来查看,这属于在电脑上行查看,另外一种服务器中查看可见后面的例子。

    3. Cookie是什么时候生成的,完整的生成、传递和使用过程是怎么样的?

    写数据到Cookie中通常是在一个页面被加载的时候,比如提交按钮被按下,后台处理完请求跳转到相应页面后会把Cookie值带回来,如下是一个例子:
    
        ·你在浏览器地址栏输入了一个站点,然后浏览器会发送请求到站点的Web服务器请求该页面
        ·与此同时,浏览器会在个人电脑上行查找和该站点对应的Cookie文件,如果发现了就会把里面的键值对内容全部发送给Web服务器,如果没找到则不发送。
        ·页面服务器接收到了Cookie的数据后,可以利用这些数据决定返回到前台的内容(更进一步是跟Session结合使用)
        ·如果没键值对被Web服务器接收到,站点就知道该用户没有访问过,就会为这个访问地址新建一个ID并且发送一些键值对给前台,这些值会被放在这次响应中的Header带给浏览器,浏览器端于是有了Cookie的值
        ·任何到服务的访问和数据请求都可能很对Cookie中的键值对进行修改

    4.用Cookie实现一个用户登陆

    urls.py

    from django.contrib import admin
    from django.urls import path
    from cookie import views

    urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/',views.login),
    path('index/', views.index),
    ]

    views.py

    from django.shortcuts import render,redirect,HttpResponse
    # Create your views here.

    user_info={
    #创建一个后台数据组
    'dachengzi':{'pwd':'123123'},
    'gangbazi':{'pwd':'123'},
    }

    def login(request):
    if request.method == "GET": #通过GET请求返回到login界面
    return render(request, 'login.html')

    if request.method == "POST": #登陆的请求方式为POST
    u = request.POST.get('user')
    p = request.POST.get('pwd')
    dic = user_info.get(u)

    if not dict:
    return render(request, 'login.html')

    if dic['pwd'] == p: #如果密码与前端输入的相同
    res = redirect('/index')
    res.set_cookie('username',u) #设置cookie里的用户名
    return res
    else:
    return render(request, 'login.html')


    def index(request):
    v = request.COOKIES.get('username') #从cookie里得到用户名
    if not v: #用户名不存在
    return redirect('/login')
    return render(request,'index.html',{'current_user': v})

    index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
    <h1>欢迎{{ current_user }}登录</h1>
    </body>
    </html>

    login.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
    <form action="/login/" method="POST">
    <input type="text" name="user" placeholder="用户名"/>
    <input type="password" name="pwd" placeholder="密码"/>
    <input type="submit" value="提交"/>
    </form>
    </body>
    </html>

     5. 使用Cookie存在的一些问题

    ·多个用户公用一台电脑比如网吧,那么前一个人登陆购物网站并购买物品,后一个人可以使用前一人的账号进行购物。
    
    ·清除浏览器缓存的账号和密码等操作可以擦出掉Cookie,因而很难恢复之前做过的操作,要查看添加到购物车商品几乎不可能。
    
    ·多太电脑之间的网站浏览记录(这里不是浏览器的历史记录)会不一致,比如这台电脑某宝告诉你你浏览过某些商品,另一台电脑可能是另外一些商品,因为不同Cookie对应的不同浏览记录。
    
    这也是为什么需要使用账号登陆的原因,只要登陆过就能把所有记录跟后台数据库中的账号强关联起来。

    6.设置Cookie

    response = HttpResponse(...) 或 response = render(request, ...)或response =redirect("/...")
     
    response .set_cookie(key,value,参数...)
    response .set_signed_cookie(key,value,salt='加密钥',参数...)
        参数:
            key,              键
            value='',         值
            max_age=None,     超时时间
            expires=None,     超时时间(IE requires expires, so set it if hasn't been already.)
            path='/',         Cookie生效的路径,/ 表示根路径,特殊的:跟路径的cookie可以被任何url的页面访问
            domain=None,      Cookie生效的域名
            secure=False,     https传输
            httponly=False    只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

    7.由于cookie保存在客户端的电脑上,所以,JavaScript和jquery也可以操作cookie。

    <script src='/static/js/jquery.cookie.js'></script>
    $.cookie("list_pager_num", 30,{ path: '/' })

     参考自:https://www.cnblogs.com/zhuifeng-mayi/p/9056981.html

    session 和 cookie的使用方式类似, 使用的方式都是request.COOKIES[XXX]和request.session[XXX],其中XXX是您想要取得的东西的key

    此文仅为鄙人学习笔记之用,朋友你来了,如有不明白或者建议又或者想给我指点一二,请私信我。liuw_flexi@163.com/QQ群:582039935. 我的gitHub: (学习代码都在gitHub) https://github.com/nwgdegitHub/
  • 相关阅读:
    09.Java数据算法
    08.Java反射问题
    07.Java类加载问题
    占位
    占位
    占位
    占位
    HTML与CSS粗浅摘要
    JavaScript(4):模态对话框、隐藏二级菜单及多选框的实现
    JavaScript(3):DOM选择器
  • 原文地址:https://www.cnblogs.com/liuw-flexi/p/9377285.html
Copyright © 2020-2023  润新知