Cooike简介

Cookie 是在 HTTP 协议下,服务器或脚本可以维护客户工作站上信息的一种方式。Cookie 是由 Web 服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的信息。无论何时用户链接到服务器,Web 站点都可以访问 Cookie 信息
目前有些 Cookie 是临时的,有些则是持续的。临时的 Cookie 只在浏览器上保存一段规定的时间,一旦超过规定的时间,该 Cookie 就会被系统清除 [2]
持续的 Cookie 则保存在用户的 Cookie 文件中,下一次用户返回时,仍然可以对它进行调用。在 Cookie 文件中保存 Cookie,有些用户担心 Cookie 中的用户信息被一些别有用心的人窃取,而造成一定的损害。其实,网站以外的用户无法跨过网站来获得 Cookie 信息。如果因为这种担心而屏蔽 Cookie,肯定会因此拒绝访问许多站点页面。因为,当今有许多 Web 站点开发人员使用 Cookie 技术,例如 Session 对象的使用就离不开 Cookie 的支持 

Cookie规范

  • Cookie大小上限为4KB;
  • 一个服务器最多在客户端浏览器上保存20个Cookie;
  • 一个浏览器最多保存300个Cookie;

上面的数据只是HTTP的Cookie规范,但在浏览器大战的今天,一些浏览器为了打败对手,为了展现自己的能力起见,可能对Cookie规范“扩展”了一些,例如每个Cookie的大小为8KB,最多可保存500个Cookie等!但也不会出现把你硬盘占满的可能! 
注意,不同浏览器之间是不共享Cookie的。也就是说在你使用IE访问服务器时,服务器会把Cookie发给IE,然后由IE保存起来,当你在使用FireFox访问服务器时,不可能把IE保存的Cookie发送给服务器。

Cookie与HTTP头

Cookie是通过HTTP请求和响应头在客户端和服务器端传递的:

  • Cookie:请求头,客户端发送给服务器端;
  • 格式:Cookie: a=A; b=B; c=C。即多个Cookie用分号离开;  Set-Cookie:响应头,服务器端发送给客户端;
  • 一个Cookie对象一个Set-Cookie: Set-Cookie: a=A Set-Cookie: b=B Set-Cookie: c=C

Cookie的覆盖

如果服务器端发送重复的Cookie那么会覆盖原有的Cookie,例如客户端的第一个请求服务器端发送的Cookie是:Set-Cookie: a=A;第二请求服务器端发送的是:Set-Cookie: a=AA,那么客户端只留下一个Cookie,即:a=AA。

Cookie相关设置属性

'''
class HttpResponseBase:def set_cookie(self, key,                 键value='',            值max_age=None,        超长时间 cookie需要延续的时间(以秒为单位)如果参数是\ None`` ,这个cookie会延续到浏览器关闭为止。expires=None,        超长时间expires默认None ,cookie失效的实际日期/时间。 path='/',           Cookie生效的路径,浏览器只会把cookie回传给带有该路径的页面,这样可以避免将cookie传给站点中的其他的应用。/ 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问domain=None,         Cookie生效的域名你可用这个参数来构造一个跨站cookie。如, domain=".example.com"所构造的cookie对下面这些站点都是可读的:www.example.com 、 www2.example.com 和an.other.sub.domain.example.com 。如果该参数设置为 None ,cookie只能由设置它的站点读取。secure=False,        如果设置为 True ,浏览器将通过HTTPS来回传cookie。httponly=False       只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)): pass'''

设置Cookie

response.set_cookie('is_login',True)cookie 的值为 key value形式

获取Cookie

request.COOKIES.get('is_login')

删除Cookie

response.delete_cookie("cookie_key",path="/",domain=name)

利用Cooke做一个简单的登录

路由

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

orm

from django.db import models# Create your models here.class User(models.Model):user = models.CharField(max_length=24)pwd = models.CharField(max_length=24)

视图

from django.shortcuts import render,HttpResponse,redirect# Create your views here.
from app01.models import  User
def login(request):if request.method =='POST':user = request.POST.get('user')pwd = request.POST.get('pwd')user_info =User.objects.filter(user=user,pwd=pwd).first()if user_info:response = HttpResponse('登录成功')response.set_cookie('is_login',True)response.set_cookie('username',user)return responsereturn render(request,'login.html')def index(request):print(request.COOKIES)if_login =request.COOKIES.get('is_login')username = request.COOKIES.get('username')if if_login:return render(request,'index.html',locals())return HttpResponse('未登录')

login.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form action=""method="post">{% csrf_token %}用户名<input type="text" name="user">密码 <input type="password"name="pwd"><input type="submit">
</form>
</body>
</html>

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h3>index</h3>
<span>{{ username }}您好</span>
</body>
</html>

整体流程、

用户访问 》登录成功》获取Cookie》访问index 页面》显示 username 您好

用户访问》登录失败》未获取Cookie》访问index页面 》显示 未登录

访问超时

from django.shortcuts import render,HttpResponse,redirect# Create your views here.
from app01.models import  User
def login(request):if request.method =='POST':user = request.POST.get('user')pwd = request.POST.get('pwd')user_info =User.objects.filter(user=user,pwd=pwd).first()if user_info:response = HttpResponse('登录成功')#从上次访问开始过期时间,不支持ie# response.set_cookie('is_login',True,max_age=10)import datetimetimes=datetime.datetime(year=2018,month=12,day=21,hour=8,minute=40,second=10)#expires 固定过期时间response.set_cookie('is_login',expires=times)response.set_cookie('username',user)return responsereturn render(request,'login.html')def index(request):print(request.COOKIES)if_login =request.COOKIES.get('is_login')if if_login:username = request.COOKIES.get('username')return render(request,'index.html',locals())else:return redirect('/login/')return HttpResponse('未登录')

指定路径

默认情况下,Cookie 是对根路径下所有的视图函数共享的,但是个别时候不想让个别视图函数使用Cookie,就需要设置Cookie生效的路径

视图

from django.shortcuts import render,HttpResponse,redirect# Create your views here.
from app01.models import  User
def login(request):if request.method =='POST':user = request.POST.get('user')pwd = request.POST.get('pwd')user_info =User.objects.filter(user=user,pwd=pwd).first()if user_info:response = HttpResponse('登录成功')#从上次访问开始过期时间,不支持ie# response.set_cookie('is_login',True,max_age=10)import datetime# times=datetime.datetime(year=2018,month=12,day=21,hour=8,minute=40,second=10)#expires 固定过期时间# response.set_cookie('is_login',expires=times)response.set_cookie('is_login', True)#指定可以使用Cookie的路径,如果不设置根路径下的所有视图函数都可以取到。
response.set_cookie('username',user,path='/index/')return responsereturn render(request,'login.html')def index(request):print(request.COOKIES)if_login =request.COOKIES.get('is_login')if if_login:username = request.COOKIES.get('username')return render(request,'index.html',locals())else:return redirect('/login/')
def tests(request):print('tests------------',request.COOKIES)return  HttpResponse('ok')

输出

{'username': 'liu ', 'is_login': 'True'}
tests------------ {'is_login': 'True'}

只有访问 ‘/index/’ 才可以拿到 username 的Cookie 的值,访问tests 无法拿到 Cookie

显示用户上次登录时间

视图

def index(request):print(request.COOKIES)if_login =request.COOKIES.get('is_login')if if_login:import  datetimenow = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')last_time =request.COOKIES.get('last_login','')username = request.COOKIES.get('username')response = render(request,'index.html',locals())response.set_cookie('last_login',now)return responseelse:return redirect('/login/')

流程

用户登录成功后,先保存当前时间到Cookie中,下次用户登录到时候获取Cookie值,在前端模版进行显示。

转载于:https://www.cnblogs.com/mjiu/p/10155904.html

Cookie (设置与读取、超时设置、指定路径、显示用户上次登录时间)相关推荐

  1. php 上次登陆时间,php使用cookie显示用户上次访问网站日期的方法

    本文实例讲述了php使用cookie显示用户上次访问网站日期的方法.分享给大家供大家参考.具体实现方法如下:<?php if(!empty($_COOKIE['lastvisit'])){//先 ...

  2. Cookie实例:显示用户上次访问的时间

    1. 效果 用户第一次访问HistServlet的时候,页面显示你是首次访问本网站,当前时间为:xxx.第n次访问:欢迎回来, 你上次访问的时间为xxx,当前时间为xxx. 2. 分析 要保证第二次访 ...

  3. Cookie经典案例—实现显示用户上次服务时间的显示

    本篇博客让我们来了解JavaWeb中的会话和会话技术,了解什么是Cookie,掌握Cookie对象的使用. 1.什么是会话? 1.会话:一次会话中包含多次请求和响应. 一次会话:浏览器第一次给服务器资 ...

  4. 利用Cookie显示上次登录时间

    利用Cookie显示上次登录时间 1 新建一个web项目,选择2.5版本点击finish. 2 在src下建一个Servlet文件,输入文件名,点击finish完成. 3 在WebContent下建立 ...

  5. 用cookie显示上次登录时间

    用cookie显示上次登录时间 一.问题 二.JAVA代码 三.HTML代码 四.效果图 一.问题 要求:用cookie保存上次登录时间,第一次登录,显示登录成功,在第二次登录时,显示上次登录时间. ...

  6. 使用cookie获取用户上次访问时间

    访问路径:http://localhost:8080/day18/cookieTest cookie可以用于不用登录的用户信息存储 大小为4k,每个域名下最多存20个 同一服务器下不同项目模块的coo ...

  7. Cookie记录用户上次访问时间

    目录 一.记录上一次用户访问时间 1.1 需求 1.2 分析 1.3 代码实现 1.4 实现效果图 1.5 总结 一.记录上一次用户访问时间 1.1 需求 (1)访问一个Servlet,如果是第一次访 ...

  8. oracle socket读取超时,设置套接字操作超时

    使用Socket()构造函数和connect(SocketAddress endpoint, int timeout)方法代替. 在您的情况下,它将类似于: Socket socket = new S ...

  9. vue 上次登录时间_Vue设置长时间未操作登录自动到期返回登录页

    Vue设置长时间未操作登录以后自动到期返回登录页 首先我们写在main.js文件中 import routerUtil from "@/utils/routerutil";//先将 ...

最新文章

  1. linux系统资源监控
  2. SAP QM 内向交货单包装的时候触发的检验批不能被自动取消?
  3. 区块链软件公司用区块链技能重塑科学出书社
  4. 学习使用Markdown最基础的语法(编辑器通用)
  5. vue 封装组件供全局使用_vue 封装组件的基本操作
  6. 远程桌面连接数超过最大限制解决方法
  7. java 两个线程同步_Java 多线程(二)—— 线程的同步
  8. Django---部署
  9. TQ2440实现触摸屏和qt图形 解决segmentation fault
  10. url中文传参乱码问题
  11. 如何将U盘刻录为系统启动盘?
  12. 用计算机中的知识秀恩爱,教你用专业知识取情侣网名
  13. tftpd32 工具中的 dhcp tftp 使用说明
  14. 北邮科技园首个元宇宙产业创新平台落地朝阳区IDP国际大数据交易产业园
  15. 比chatgpt稍逊的ai问答网站phind,专用于编写代码
  16. Linux引导过程和GRUB引导器
  17. HDCP Key工作原理
  18. 固定资产管理系统怎么选,详细评测为你解答
  19. 电子书管理软件Calibre使用
  20. linux如何访问共享目录权限设置密码,文件夹如何设置密码_在共享文件夹上怎么设置密码访问 - 驱动管家...

热门文章

  1. 使用第三方登录百度网盘时提示“由于网络原因无法载入页面 请点击刷新后重试”
  2. nginx一招配置,帮你快速隐藏php后缀名
  3. 1 Linux SSH安全加固
  4. 关于Postgre中的Timestamp(时间戳)格式。
  5. Spark2.2出现异常:ERROR SparkUI: Failed to bind SparkUI
  6. javaWeb自己定义可排序过滤器注解,解决Servlet3.0下@WebFilter注解无法排序问题
  7. vue 单页面(SPA) history模式调用微信jssdk 跳转后偶尔 “invalid signature“错误解决方案
  8. Linux系统中提示/usr/bin/ld: cannot find -lxxx错误的通用解决方法
  9. 启动Hadoop时候datanode没有启动的原因及解决方案
  10. 80端口被占用时的终极解决方法