Session_Django中操作session

本文详细介绍了Django中Session的工作原理,包括Session与Cookie的区别、Django中Session的存储方式(默认存储在数据库中)、Session数据的保存流程及Session的常用操作,如设置、获取、清除和设置过期时间等。

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

Session

1、Session和Cookie的作用有点类似,都是为了存储用户相关的信息。不同的是:
    ⑴Cookie是存储在本地浏览器中(实际存在的)
    ⑵Session是一个思路、一个概念、一个服务器存储授权信息的解决方案,不同的服务器,不同的框架,不同的语言有不同的实现
    ⑶虽然Session实现方式不一致,但是它们的目的都是服务器为了方便存储数据的。Session的出现,是为了解决Cookie存储数据不安全的问题

2、Cookie是在浏览器端保存键值对数据,而Session是在服务器端保存键值对数据
    ⑴不管是Cookie还是Session都是以键值对的形式存在的,键名任意,值一般都是用户信息相关的数据

3、Session的使用依赖Cookie:在使用Session后,会在Cookie中存储一个Sessionid的数据,每次请求时浏览器都会将这个数据发给服务器,服务器在接收到Sessionid后,会根据这个值找出这个请求者的Session

4、Cookie和Session的使用:Web开发发展至今,Cookie和Session的使用已经出现了一些非常成熟的方案。在如今的市场或者企业中,一般有两种存储方式
    ⑴存储在服务器端:如果用户已经登录,则服务器会在Cookie中存储一个Sessionid,下次再请求的时候,会把这个Sessionid携带上来,服务器根据Sessionid在Session库中获取用户的Session数据(数据中一般都会包含用户信息)。就能知道用户是谁了
    ⑵将Session数据加密,然后存储在Cookie中,这种专业术语叫client side session。flask框架默认采用的就是这种方式

5、Session是在用户访问的时候,创建一个随机的字符串,保存在客户端的Cookie里面,默认名是sessionid,然后在服务器端,给这个字符串创建一个键值对,这个字符串的值又可以是一个字典结构,保存所有相关的信息
    ⑴因此可以这么理解,Session是服务器端的一个巨大的键值对,每一个key都对应一个登录用户的随机字符串,每个key都有自己的value,这个value同样是一个字典,包括这个登录账号的所有信息

Django中Session的存储

1、在Django中session信息采用的是存储在服务器端的方式:存储在数据库中

2、Django把session信息默认存储到数据库中,当然也可以存储到其他地方,比如缓存中,文件系统中等。存储在服务器的数据会更加安全,不容易被窃取。但存储在服务器中也有一定的弊端,就是会占用服务器的资源。但是服务器已经发展至今,存一些Session信息还是绰绰有余的

3、Django中Session键值对数据保存:
    ⑴session的键值对数据默认保存在django项目的一张数据库表中(表名为:django_session)
    ⑵django_session这个表在配置数据库并生成具体的表时会自动生成:Django默认配置好的,只需要执行命令生成具体的表就好了

4、Django会在表中会根据Sessionid来提取指定的Session数据
    ⑴浏览器第一次访问时生成Sessionid和具体的Session数据,将Sessionid和Session数据保存到数据库中,再把这个S

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来管理会话。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值