Cookie (设置与读取、超时设置、指定路径、显示用户上次登录时间)
Cooike简介
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 (设置与读取、超时设置、指定路径、显示用户上次登录时间)相关推荐
- php 上次登陆时间,php使用cookie显示用户上次访问网站日期的方法
本文实例讲述了php使用cookie显示用户上次访问网站日期的方法.分享给大家供大家参考.具体实现方法如下:<?php if(!empty($_COOKIE['lastvisit'])){//先 ...
- Cookie实例:显示用户上次访问的时间
1. 效果 用户第一次访问HistServlet的时候,页面显示你是首次访问本网站,当前时间为:xxx.第n次访问:欢迎回来, 你上次访问的时间为xxx,当前时间为xxx. 2. 分析 要保证第二次访 ...
- Cookie经典案例—实现显示用户上次服务时间的显示
本篇博客让我们来了解JavaWeb中的会话和会话技术,了解什么是Cookie,掌握Cookie对象的使用. 1.什么是会话? 1.会话:一次会话中包含多次请求和响应. 一次会话:浏览器第一次给服务器资 ...
- 利用Cookie显示上次登录时间
利用Cookie显示上次登录时间 1 新建一个web项目,选择2.5版本点击finish. 2 在src下建一个Servlet文件,输入文件名,点击finish完成. 3 在WebContent下建立 ...
- 用cookie显示上次登录时间
用cookie显示上次登录时间 一.问题 二.JAVA代码 三.HTML代码 四.效果图 一.问题 要求:用cookie保存上次登录时间,第一次登录,显示登录成功,在第二次登录时,显示上次登录时间. ...
- 使用cookie获取用户上次访问时间
访问路径:http://localhost:8080/day18/cookieTest cookie可以用于不用登录的用户信息存储 大小为4k,每个域名下最多存20个 同一服务器下不同项目模块的coo ...
- Cookie记录用户上次访问时间
目录 一.记录上一次用户访问时间 1.1 需求 1.2 分析 1.3 代码实现 1.4 实现效果图 1.5 总结 一.记录上一次用户访问时间 1.1 需求 (1)访问一个Servlet,如果是第一次访 ...
- oracle socket读取超时,设置套接字操作超时
使用Socket()构造函数和connect(SocketAddress endpoint, int timeout)方法代替. 在您的情况下,它将类似于: Socket socket = new S ...
- vue 上次登录时间_Vue设置长时间未操作登录自动到期返回登录页
Vue设置长时间未操作登录以后自动到期返回登录页 首先我们写在main.js文件中 import routerUtil from "@/utils/routerutil";//先将 ...
最新文章
- linux系统资源监控
- SAP QM 内向交货单包装的时候触发的检验批不能被自动取消?
- 区块链软件公司用区块链技能重塑科学出书社
- 学习使用Markdown最基础的语法(编辑器通用)
- vue 封装组件供全局使用_vue 封装组件的基本操作
- 远程桌面连接数超过最大限制解决方法
- java 两个线程同步_Java 多线程(二)—— 线程的同步
- Django---部署
- TQ2440实现触摸屏和qt图形 解决segmentation fault
- url中文传参乱码问题
- 如何将U盘刻录为系统启动盘?
- 用计算机中的知识秀恩爱,教你用专业知识取情侣网名
- tftpd32 工具中的 dhcp tftp 使用说明
- 北邮科技园首个元宇宙产业创新平台落地朝阳区IDP国际大数据交易产业园
- 比chatgpt稍逊的ai问答网站phind,专用于编写代码
- Linux引导过程和GRUB引导器
- HDCP Key工作原理
- 固定资产管理系统怎么选,详细评测为你解答
- 电子书管理软件Calibre使用
- linux如何访问共享目录权限设置密码,文件夹如何设置密码_在共享文件夹上怎么设置密码访问 - 驱动管家...
热门文章
- 使用第三方登录百度网盘时提示“由于网络原因无法载入页面 请点击刷新后重试”
- nginx一招配置,帮你快速隐藏php后缀名
- 1 Linux SSH安全加固
- 关于Postgre中的Timestamp(时间戳)格式。
- Spark2.2出现异常:ERROR SparkUI: Failed to bind SparkUI
- javaWeb自己定义可排序过滤器注解,解决Servlet3.0下@WebFilter注解无法排序问题
- vue 单页面(SPA) history模式调用微信jssdk 跳转后偶尔 “invalid signature“错误解决方案
- Linux系统中提示/usr/bin/ld: cannot find -lxxx错误的通用解决方法
- 启动Hadoop时候datanode没有启动的原因及解决方案
- 80端口被占用时的终极解决方法