概述
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 response return 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 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('username',user) return response return 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 response return 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 datetime now = 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 response else: return redirect('/login/')
流程
用户登录成功后,先保存当前时间到Cookie中,下次用户登录到时候获取Cookie值,在前端模版进行显示。
转载于:https://www.cnblogs.com/mjiu/p/10155904.html
最后
以上就是任性发夹为你收集整理的Cookie (设置与读取、超时设置、指定路径、显示用户上次登录时间)的全部内容,希望文章能够帮你解决Cookie (设置与读取、超时设置、指定路径、显示用户上次登录时间)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复