Django框架下的小人物--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的例子



这个例子是利用Cookie实现一个用户登陆

views.py

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)          #从前端得到username与user_info的数据组进行比较
        if not dic:     #不相同
            return render(request,‘login.html‘)   #返回login.html
        if dic[‘pwd‘]==p:       #如果密码与前端输入的相同
            res=redirect(‘/index‘)    #跳转到index.html
            res.set_cookie(‘username‘,u)   #设置cooki里的用户名
            return res
        else:
            return render(request,‘login.html‘)

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

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>

index.html

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

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



·多个用户公用一台电脑比如网吧,那么前一个人登陆购物网站并购买物品,后一个人可以使用前一人的账号进行购物。

·清除浏览器缓存的账号和密码等操作可以擦出掉Cookie,因而很难恢复之前做过的操作,要查看添加到购物车商品几乎不可能。

·多太电脑之间的网站浏览记录(这里不是浏览器的历史记录)会不一致,比如这台电脑某宝告诉你你浏览过某些商品,另一台电脑可能是另外一些商品,因为不同Cookie对应的不同浏览记录。

这也是为什么需要使用账号登陆的原因,只要登陆过就能把所有记录跟后台数据库中的账号强关联起来。

原文地址:https://www.cnblogs.com/zhuifeng-mayi/p/9056981.html

时间: 2024-10-10 20:23:23

Django框架下的小人物--Cookie的相关文章

django框架下ajax获取cookie和session的方法以及简单的vue

Django的配置: pycharm中创建django工程之后注释掉MIDDLEWARE项中的'django.middleware.csrf.CsrfViewMiddleware'.此处作用是为了能够让js获取到cookie值 同时为了使用mysql,我们在setting中修改DATABASES中的'default'项为 'ENGINE': 'django.db.backends.mysql', 'NAME': 'db_test_shop1', 'HOST':'127.0.0.1', 'PORT

MySQL在Django框架下的基本操作(MySQL在Linux下配置)

[原]本文根据实际操作主要介绍了Django框架下MySQL的一些常用操作,核心内容如下: ------------------------------------------------------------------------------------------------- 1. Linux环境下MySQL的安装与配置 2. [Linux]MySQL在Django框架下的基本操作 3. 本文相关的一些参考网址 注:本文会根据实践,持续更新文档,如有错误,希望读者指出哈!~ -----

Django框架下多国语言支持设置

Django框架下多国语言支持设置,步骤如下: 1.安装GNU gettext tools Django是通过gettext组建支持多国语言的,因此需要安装 下载地址为:http://gnuwin32.sourceforge.net/packages/gettext.htm window平台下载Binaries版本(编译好的exe,直接安装),然后设置系统路径 ubuntu平台:sudo apt-get install gettext 2.设置项目下得settings.py  = LOCALE_

Django框架下的增强分页组件

本文通过文章同步功能推送至博客园,显示排版可能会有所错误,请见谅! 描述:Django框架内置了分页功能,但其只能满足简单需求,难以实现复杂功能. 实现代码: #!/usr/bin/env python3 # -*- coding:utf-8 -*- __auth__ = 'Song Wei' from django.utils.safestring import mark_safe from math import ceil class Paginator: '''自定制分页功能,支持设置标签

Django框架(九)--cookie和session

cookie和session组件 cookie 1.cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后面的请求响应情况. 一句有意思的话来描述就是人生只如初见,对服务器来说,每次的请求都是全新的. 状态可以理解为客户端和服务器在某次会话中产生的数据,那无状态的就以为这些数据不会被保留.会话中产生的数据又是我们需要保存的,也就是说要“保持状态”.因此C

Django 框架下的Blog 搭建 ---第一篇笔记

1.安装python 2.x 版本并加入环境变量 2.安装 virtualevn 工具将系统隔离成一个个虚拟docker 参考:https://pypi.python.org/pypi/virtualenv 2.1 mkdir 一个文件夹,并用 virtualenv  文件夹名, 虚拟一个带 setuptools 等工具的 python 环境 2.2 用 bin 目录下的工具 pip 进行安装Django    ./pip install Django==1.9.6  参考:https://do

1、Python django 框架下的word Excel TXT Image 等文件的上传

1.文件上传(input标签) (1)html代码(form表单用post方法提交) 1 <input class="btn btn-primary col-md-1" style="margin:0px 15px 25px 15px;" id="submitForm" type="button" value="提交" /> 2 <form id="picture_form&qu

python之路(18)django框架入门

前言 Django框架下的views,templates views视图函数的属性方法 http下有两个核心类:HttpResquest类和HttpResponse类 requesr request.path : 当前url访问的路径 request.get_full_path() : url带参数的全路径 request.method : 返回请求的方式,即GET或POST request.POST.get("") / GET.get("") : 得到value

Cenos(6.6/7.1)下源码安装Python2.7、pip、MySQLdb、Django框架

Cenos7.1下安装Python.pip.MySQLdb.Django框架: 梳理下这几个的关系,centos6.5是redhat最新的社区版操作系统. Python2.7.5是开发语言(centos6.5下自带的python是2.6.6版本,所以需要源码更新,而centos7.1下面自带的是2.7.5) pip1.5.4是一个安装和管理 Python 包的工具 ,是easy_install的替代品,就像yum一样.用它可以安装指定版本的Django和mysql  Django是python下