TCP,HTTP通讯协议 Response、Request库 Cookie、Session、Token会话工具 crfs

本文介绍了HTTP中的Cookie、Session和Token会话管理技术,包括它们的设置、获取、删除方法,以及在Django框架中的应用。此外,还探讨了CSRF防护和HTTP响应的相关内容,如HttpResponse子类和HTTP状态码。
摘要由CSDN通过智能技术生成

#TCP,HTTP通讯协议 Response、Request库 Cookie、Session、Token会话工具 crfs

HttpRequest

服务器在接受到http请求后,会根据报文创建httprequest对象,视图中第一个参数就是httprequest对象

django框架会进行自行包装,之后床底给视图

request

属性

path:请求的完整路径

method:请求的方法

encoding:编码方式

GET:类似字典参数,包含了get的所有参数

POST:类似该带你的参数,包含了post所有参数

###FILES:类似字典的参数,包含看上传的文件:

会话技术

解决度武器如何识别客户端的问题

http在web开发中基本都是短链接即从request开始response结束

一、Cookie

客户端技术,将数据信息存储到浏览器中,存储的结构是字典结构,即key-value.

Cookie是服务端创建,但保存于客户端,客户端每次发送请求时都会将Cookie信息发送到服务器(因为Cookie是请求头信息的一部分)

Cookie不支持中文,不能跨浏览器,不能跨域名

1、设置cookie

set_cookie(key, value=’’, max_age=None, expires=None, path=’/’, domain=None, secure=None, httponly=False)

set_signed_cookie(key, value, salt=’’, max_age=None, expires=None, path=’/’, domain=None, secure=None, httponly=True)设置加密的cookie,salt是秘钥

key: cookie的name
value:cookie的值
max_age:cookie存活时间,单位是秒
expires:具体过期时间
path:cookie的访问路径,只有在某个路径下访问
domain:域名,只有在某个域名下访问
secure:安全
httpoly:如果为True那么js就不能获取cookie

max-age 有效时长,单位为秒,指定为0,表示关闭浏览器失效(默认)指定为有效数值100表示100秒后自动失效,设置为None永不过期

expires 支持一个datetime或timedelta,可以指定一个具体的日期,expires=timedelta(days=10)表示十天后过期

max-age和xepires两个指定一个

# 普通设置,以明文的方式显示
def setcookie(request):
response = HttpResponse('设置COOKIE成功')
response.set_cookie('name','egon')
return response
#加盐设置,以加密的形式显示
def do_login(request):

uname = request.POST.get('uname')

response = HttpResponseRedirect(reverse('app:mine'))

# response.set_cookie('uname', uname, max_age=60)
response.set_signed_cookie('content', uname, "Rock")

return response

2、获取

HttpRequest.COOKIES.get(key)

request.get_signed_cookie(“cookie名称”,salt=“盐”)

def getcookie(request):
return HttpResponse(request.COOKIES.get('name'))
def mine(request):

# uname = request.COOKIES.get("content")

try:

  uname = request.get_signed_cookie("content", salt="Rock")

  if uname:
      # return HttpResponse(uname)

      return render(request, 'mine.html', context={"uname": uname})
except Exception as e:
  print("获取失败")

return redirect(reverse('app:login'))

3、删除

response.delete_cookie(key)

def logout(request):

response = redirect(reverse("app:login"))

response.delete_cookie("content")

return response

二、Session

Session是用来表示一个用户与服务端的一次“会话”。使用客户端发送的sessionid(存在与Cookie中)与服务端的sessionid匹配,找到客户端请求所属的“会话”,经常用于登录验证。

Session一般保存在内存中,在Django中,Session默认使用数据库保存,若想变更Session的保存方式,需要添加SESSION_ENGINE配置信息,可以将session保存到redis中。

Django 默认 Session 数据保存到数据库中,可以在 settings.py 中看到配置信息项目。

INSTALLED_APPS = [
# 启用 sessions 应用
'django.contrib.sessions',
]

MIDDLEWARE = [
# 启用 Session 中间层
'django.contrib.sessions.middleware.SessionMiddleware',
]

除了上述的基于数据库的会话,Django 还提供另外三种方法:
1)保存到缓存中
如果你的场景需要快速存储会话,可以选择该方案。使用之前,需要配置下 Django 的缓存框架。在 settings.py 中增加 SESSION_ENGINE 配置。

这其中也是有两种保存数据的方案,具体配置如下:

  • 方案一
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

这种配置方案 Django 只是简单保存会话。同时,这种方案持久性不好。因为当缓存数据存满时将清除部分数据,或者遇到缓存服务器重启时数据将丢失。

  • 方案二
SESSION_ENGINE =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值