django_session

本文深入探讨了HTTP协议下的无状态与有状态请求的区别,详细解释了Cookie和Session机制如何实现用户的登录状态保持,以及在Django框架中Session的实现原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

无状态请求

基于http协议的web应用,是请求-应答模式,这是无状态的。就是说,每次请求都是独立的,它的执行结果和状态和之后的请求是没有直接关系的,不会收到之前请求应答情况的直接影响,也不会影响后面的请求应答情况。

有状态请求

比如在浏览博客网,网站可以直接记住用户的登录状态,在无状态下这是无法做到的。在无状态下,服务端不认识客户端。

服务端要记住客户端,就需要cookie。就是在客户端访问服务端时,服务端给客户端生成一个id来标记它,让后返回给客户端,客户端把这个id存储在本地的cookie里。(这个cookie是在这个服务端的域之下)

下次客户端请求服务端时,会带着cookie里的id,服务端就会认识,就会把id为1中的信息取出返回。

如下图,登录成功的博客网,浏览器会在本地的cookie下的该域名下,以键值对的方式存储cookie,下次浏览器再访问博客网,就能用cookie直接登录。

如果我这时清空cookie,服务端就不认识这个客户端了,刷新就会失去登录状态。

 

session

在访问django服务器时,如果要登录,就要给出账户信息,原始的方式就是在cookie里放一个{'username':'xxx','password':'xxx'}的键值对。但这样显然不安全。

这时就需要sessionid。

 

在settings中的installed_app中,默认带有'django.contrib.sessions'。

当做migrate时,django会在db中创建一张表,django_session。

当有账户登录时,sessions会拦截request,如果带有sessionid,就去表中查找对应的session_key,找到,就解密session_data中的账户信息。

找不到,则进入登录流程。

当服务端response时,sessions也会把sessionid加入进去返回给浏览器。

 

 




转载于:https://www.cnblogs.com/jabbok/p/10321397.html

Django框架中的`django_session`是一个存储会话信息的数据库表,通常用于存储用户的会话数据。这些会话数据被序列化后存储在名为`session_data`的列中。默认情况下,`session_data`是一个文本字段,存储着序列化后的Python数据结构。 要解析`django_session`中的`session_data`数据,你可以通过以下步骤来进行: 1. 连接到数据库:首先需要连接到存储Django会话信息的数据库中。 2. 查询`django_session`表:通过SQL查询或者Django的ORM系统查询`session_key`对应的会话数据。 3. 反序列化数据:`session_data`列中的数据是序列化过的,需要使用Python的`pickle`模块或者Django自带的序列化工具来反序列化这些数据。 在Django中,通常不需要直接与数据库交互来处理会话数据,因为Django提供了一套高级的会话框架,可以直接通过视图、模板、中间件等方式来读取或更新会话数据。如果确实需要对`session_data`进行直接操作,可以通过以下代码示例进行反序列化: ```python import pickle from django.contrib.sessions.models import Session # 获取特定session_key的会话数据 session_key = '你的session_key' try: session = Session.objects.get(session_key=session_key) # 反序列化session_data session_data = pickle.loads(session.session_data.encode('utf-8')) # session_data现在是一个字典,包含了所有的会话数据 except Session.DoesNotExist: print('Session does not exist') # 处理会话数据 # ... 你的代码逻辑 ... ``` 请注意,直接操作数据库来修改会话数据可能会导致Django会话管理的不一致,因此通常建议使用Django提供的API来管理会话。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值