(十九)Django中cookie和session用法

一、cookie和session基础简介

  由于http请求是无状态的,无法记录用户的身份,所以需要有一种机制来长期的保存和校验用户的身份,最先出现的是cookie。
  Cookie:是由服务器下发用户(浏览器)本地的用于校验身份的数据。

cookie工作的机制:

  • 用户第一次请求服务器
  • 服务器根据用户提交的数据来识别用户身份,然后下发对应的cookie
  • 用户第二次携带cookie请求服务器
  • 服务器根据cookie为用户提供服务。

由于cookie是由服务器下发到用户本地的,所以导致了一些安全性问题:

  • 用户可以拒收cookie
  • 用户可以仿造cookie

Session就是为了解决cookie的安全性问题提出的一种新的回话控制技术。

Session需要结合cookie进行使用。

Session存放在服务器的数据库当中
在这里插入图片描述

  使用session之后,不会再次直接向服务器下发cookie身份信息,下发的是一个随机不重复的session_id,用户携带session_id访问服务器,服务器通过session_id判断身份,下发cookie。再次校验

校验:

  • session和cookie对应
  • Session是否过期
  • Cookie是否合法

cookie和session的比对:

  • cookie放在用户本地,session存在服务器数据库当中
  • 校验cookie速度比较快,但安全性不够好
  • 校验session速度比较慢,安全性相对好

二、cookie的基本操作

1、设置cookie

定义视图函数

def setCookie(request):
    #定义一个服务器响应对象,基于这个对象设置cookie
    response = render(request,"Set_Cookie.html")
    response.set_cookie("username","zss")
    #cookie可以设置多个
    response.set_cookie("password","123")
    return response

定义页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <a href="/index/">点我呀</a>
</body>
</html>

路由
在这里插入图片描述

查看cookie的下发
在这里插入图片描述

请求携带cookie,点击a标签
在这里插入图片描述

设置cookie的参数
在这里插入图片描述

参数说明
Keycookie的键
valuecookie的值
max_agecookie存在的有效时间,寿命
expirescookie超时时间,时间点和max_age冲突
path=’/’,cookie起作用的范围,默认是当前网站
domaincookie起作用的域名,www.baidu.com
secure如果为True使用https传输cookie,默认false
httponly只通过http协议传输cookie
samesite相同网站(域名)使用cookie

2、获取(校验)cookie
定义视图函数
在这里插入图片描述
定义页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <a href="#">跳转</a>
    
</body>
</html>

路由:
在这里插入图片描述

测试:访问index页面,第一次应该是不能直接访问,会重定向到sc页面(cookie设置页面),第二次才能访问

在这里插入图片描述
由于第一次访问没有cookie自动重定向到sc
在这里插入图片描述
第二次访问index
在这里插入图片描述

3、删除cookie
定义视图函数
删除cookie后重定向到一个自定义响应的页面

def page404(request):
    return HttpResponse('页面去神游太空去了,稍后再试')

def delCooike(request):
    response = HttpResponseRedirect('/p4/')
    response.delete_cookie('username')
    return response

路由:
在这里插入图片描述
定义页面
index中添加一个指向删除视图函数的a标签
在这里插入图片描述
测试:
点击删除cookie
在这里插入图片描述
删除cookie后跳转到自定义提示页面
在这里插入图片描述
此时再次访问index,发现又自定跳转到sc页面了
在这里插入图片描述

三、session的基本操作

1、添加session
session保存在服务器上,django提供了类字典对象对session进行操作
一般session和cookie一起使用

def setCookie(request):
    #定义一个服务器响应对象,基于这个对象设置cookie
    response = render(request,"Set_Cookie.html")
    response.set_cookie("username","zss")
    #cookie可以设置多个
    response.set_cookie("password","123")
    # 添加session
    request.session['username'] = 'zs'
    return response

此时访问sc页面,出现了 session id
在这里插入图片描述
服务器数据库中查看
在这里插入图片描述

2、获取session
在这里插入图片描述

3、删除session


def delCooike(request):
    response = HttpResponseRedirect('/p4/')
    response.delete_cookie('username')
    request.session.get('username')
    return response

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值