cookie和session

什么是COOKIE

当客户端访问时,服务端会为客户端生成一个Cookie键值对数据,通过Response响应给到客户端。当下一次客户端继续访问相同的服务端时,浏览器客户端就会将这个Cookie值连带发送到服务端

Cookie值存储在浏览器下,一般在你的浏览器安装目录的Cookie目录下,我们也可以通过F12或者各种浏览器的开发者工具来获取到

因为cookie是保存在浏览器中的一个纯明文字符串,所以一般来说服务端在生成cookie值时不建议存储敏感信息比如密码

框架对于COOKIE的操作

cookie大小上限为4kb

一个服务器最多在客户端上保存20个cookie,一个浏览器 最多保存300个cookie,cookie不安全不建议存敏感信息是明文存储的,是一个k/v格式的键值对

django的代码中,我们可以使用一些提供Response响应的类,如:HttpResponseredirect等实例的内置set_cookie函数来进行django项目中的Cookie设置

设置cookie

class CookieOper(View):
# 定义方法设置、获取cookie 删除cookie
def get(self,request):
# 创建响应对象
resp = HttpResponse()
# 设置cookie
resp.set_cookie("name","hahahaha")
resp.set_cookie("pwd","123456")
# 获取一下name的值
print(request.COOKIES.get("name"))
# 删除cookie
resp.delete_cookie("name")
# 获取一下name
print(request.COOKIES.get("name"))
# 返回响应对象
return resp

cookie:存在浏览器中明文,不适合存储敏感信息

Session的原理

虽然说有了Cookie之后,我们把一些信息保存在客户端浏览器中,可以保持用户在访问站点时的状态,但是也存在一定的安全隐患,Cookie值被曝露,Cookie值被他人篡改,等等。我们将换一种更健全的方式,也就是接下来要说的Session

Session在网络中,又称会话控制,简称会话。用以存储用户访问站点时所需的信息及配置属性。当用户在我们的Web服务中跳转时,存储在Session中的数据不会丢失,可以一直在整个会话过程中存活

框架是如何存储管理Session的

   在django中,默认的Session存储在数据库中session表里。默认有效期为两个星期。 session创建流程

  1. 客户端访问服务端,服务端为每一个客户端返回一个唯一的sessionid,比如xxx

  2. 客户端需要保持某些状态,比如维持登陆。那么服务端会构造一个{sessionid: xxx }类似这样的字典数据加到Cookie中发送给用户。注意此时,只是一个随机字符串,返回给客户端的内容并不会像之前一样包含实际数据。

  3. 服务端在后台把返回给客户端的xxx字符串作为key值,对应需要保存的服务端数据为一个新的字典,存储在服务器上,例如:{xxx : {id:1}}

之后的一些客户端数据获取,都是通过获取客户端向服务端发起的HttpRequest请求中里Cookie中的sessionid之后,再用该sessionid从服务端的Session数据中调取该客户端存储的Session数据

注意补充说明,默认存储在数据库的Session数据,是通过base64编码的,我们可以通过Pythonbase64模块下的b64decode()解码得到原始数据

整个过程结束之后:客户端浏览器存储的其实也只是一个识别会话的随机字符串(xxx)

而服务器中是通过这个随机的字符串(xxx:value)进行真正的存储

Session的使用必须在Settings配置下

框架如何操作Session

settings.pySessionMiddleware激活后 在视图函数的参数request接收到的客户端发来的HttpResquest请求对象中都会含有一个session属性

这个属性和之前所讨论的Cookie类似,是一个类字典对象,首先支持如下常用字典内置属性

设置session

class SessionOper(View):
def get(self,request):
# 设置session
request.session["name"] = "hahahahaha"
# 获取session
print(request.session.get("name"))
# 清空session
request.session.clear()
# request.session.flush() # sessionid会被删掉
# 删除 再次打印会返回None
# del request.session["name"]
# print(request.session.get("name"))
return HttpResponse()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值