首页 技术 正文
技术 2022年11月17日
0 收藏 968 点赞 3,180 浏览 2019 个字

http://www.cnblogs.com/liwenzhou/p/8343243.html

一、Cookie

Cookie是什么?

  就是保存在客户端浏览器上的键值对。

Cookie为什么存在?

  因为HTTP请求是没有状态的,每一次请求都是独立的。

服务端控制着响应,在响应里可以让浏览器在本地保存键值对,下一次登录时可以自动携带这个值。

Cookie的应用:

  1、登陆、七天免登陆。

  2、记录用户的浏览习惯。

  3、简单的投票限制。

Cookie是服务端设置的,浏览器可以不让服务端设置Cookie(禁用),但是就无法登陆。

Cookie默认在浏览器关闭时清楚。

(1)Cookie设置流程(以登陆为例):

  1、在登陆数据提交时red = redrict(…)     red.set_cookie(“key”,”value”)

  2、在主页验证是否有cookie: request.COOKIES.get(“…”)

(2)装饰器

由于在每个页面都会用到Cookie,所以可以把验证Cookie的语句封装成装饰器来使用:

(3)验证cookie后返回之前的页面  path_info

(4)cookie的保存时间max_age

(5)删除cookie

 def cookie_decoration(func):     def inner(request):         ":             return func(request)         else:             present_url = request.path_info    #获取当前url地址             return redirect("/login"+"/?pre="+present_url)     return inner def login(request):     if request.method == "POST":         ":             if request.GET.get("pre"):  #获取上一页url地址                 red = redirect(request.GET.get("pre"))             else:                 red = redirect("/home")             red.set_cookie(",max_age=30)  #max_age是cookie值保存的时间,以秒为单位             return red         else:             return HttpResponse("error")     return render(request,"login.html",locals()) @cookie_decoration def home(request):     return render(request,"home.html",locals()) def logout(request):     red = redirect("/login")     red.delete_cookie("is_login")     return red

二、session

为什么有session?

  cookie有一些弊端,其存储的数据是有限制的,而且数据存储在客户端,容易被窃取,所以出现session,session没有数据大小限制,且数据存储在服务端,安全性强。

  session依赖于cookie,他把随机字符串作为一个大字典的键,把数据都存储在这个大字典中,字典存储在服务端,而把这个随机字符串作为cookie的值传给客户端,所以客户端只拿到这个随机值,通过这个值去服务端取数据。

注意:session需要创建数据库信息,才能把键值对存储在数据库中,不然无法使用,记得makemigrations

 def cookie_decoration(func):     def inner(request):         if request.session.get("is_login") == "true":             return func(request)         else:             present_url = request.path_info    #获取当前url地址             return redirect("/app02/login"+"/?pre="+present_url)     return inner def login(request):     if request.method == "POST":         ":             request.session['is_login'] = "true"             if request.GET.get("pre"):  #获取上一页url地址                 return redirect(request.GET.get("pre"))             else:                 return redirect("/app02/home")         else:             return HttpResponse("error")     return render(request,"login.html",locals()) @cookie_decoration def home(request):     return render(request,"home.html",locals()) def logout(request):     request.session.flush()     return redirect("/app02/login")
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,488
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,903
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,737
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,489
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,128
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,290