zoukankan      html  css  js  c++  java
  • 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/
  • 相关阅读:
    微信二维码 场景二维码 用于推送事件,关注等 注册用户 ,经过测试
    简单的 Helper 封装 -- CookieHelper
    简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)
    Java反射机制
    Windows Azure Web Site (13) Azure Web Site备份
    Windows Azure Virtual Machine (1) IaaS用户手册
    Windows Azure Web Site (1) 用户手册
    Windows Azure Web Site (12) Azure Web Site配置文件
    Windows Azure Web Site (11) 使用源代码管理器管理Azure Web Site
    Windows Azure Web Site (10) Web Site测试环境
  • 原文地址:https://www.cnblogs.com/liuw-flexi/p/9377285.html
Copyright © 2011-2022 走看看