django中session的使用

本文介绍了Django框架中Session的实现原理与操作方法,包括Session的存储方式、配置选项及如何利用Session进行用户验证。

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

Django进阶之session

    <div class="postBody">
        <div id="cnblogs_post_body" class="blogpost-body"><p>基于cookie做用户验证时:敏感信息不适合放在cookie中</p>

session依赖cookie

session原理

cookie是保存在用户浏览器端的键值对

session是保存在服务器端的键值对

 

session服务端中存在的数据为:

复制代码
session = {

   随机字符串1:{

   用户1的相关信息

}

   随机字符串2:{

   用户2的相关信息

}

}
复制代码

session客户端即客户端的浏览器的cookie中存的数据是当前用户对应的随机字符串

session的工作过程

1、    生成随机字符串

2、    写到用户浏览器的cookie中

3、    保存到session中

4、    在随机字符串对应的字典中设置相关内容

而上述过程在Django中的体现为:

request.session[“username”]=user

这里的username为通过request.POST.get(“username”)从前端html页面中获取到的用户名信息

注意:

在Django中要用session中一定要先执行:

python manage.py makemigrations

python manage.py migrate

 

当用户登录的时候的就会在数据库的django_session表中记录session信息

 

同样的通过request.session[“username”]也可以获取相应的值

在这个过程中:

1、    首先获取当前用户的随机字符串

2、    根据随机字符串获取对应的内容

 

session的操作

 

request.session[“k1”]  如果不存在则会报错

request.session.get[“k1”],如果不存在则会报错,为了防止出错可以request.session.get(‘k1’,none)

 

request.session[‘k1’] = 123 设置session值

request.session.setdefault(‘k1’,123)  存在则不设置

del request.session[‘k1’]  删除

request.session.clear()    删除

 

所有 键、值、键值对

request.session.keys()

request.session.values()

request.session.items()

request.session.iterkeys()

request.session.itervalues()

request.session.iteritems()

 

用户session的随机字符串

request.session.session_key

 

将所有Session失效日期小于当前日期的数据删除

request.session.clear_expired()

 

检查 用户session的随机字符串 在数据库中是否

request.session.exists(“session_key”)

 

删除当前用户的所有Session数据

request.session.delete(“session_key”)

 

request.session.set_expiry(value)

默认的过期时间是两周,如果自己设置了过期时间,这样自己设定的优先级就会高于默认的

如果value是个整数,session会在些秒数后失效。

如果value是个datatime或timedelta,session就会在这个时间后失效。

如果value是0,用户关闭浏览器session就会失效。

如果value是None,session会依赖全局session失效策略。

 

配置setting.py

SESSION_COOKIE_NAME = “sessionid”      # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)

SESSION_COOKIE_PATH = “/”              # Session的cookie保存的路径(默认)

SESSION_COOKIE_DOMAIN = None             # Session的cookie保存的域名(默认)

SESSION_COOKIE_SECURE = False          # 是否Https传输cookie(默认)

SESSION_COOKIE_HTTPONLY = True         # 是否Session的cookie只支持http传输(默认)

SESSION_COOKIE_AGE = 1209600             # Session的cookie失效日期(2周)(默认)

SESSION_EXPIRE_AT_BROWSER_CLOSE = False    # 是否关闭浏览器使得Session过期(默认)

SESSION_SAVE_EVERY_REQUEST = False        # 是否每次请求都保存Session,默认修改之后才保存(默认)

 

Django中对于session的存储方式

Django中支持session,其中内部提供了5种类型的session供开发者使用:

数据库(默认)

缓存

文件

缓存+数据库

加密cookie

1、如果是数据库,需要在settings.py中配置如下:

SESSION_ENGINE = ‘django.contrib.sessions.backends.db’ (引擎(默认))

2、如果是缓存session,需要在settings.py中配置如下:

SESSION_ENGINE = ‘django.contrib.sessions.backends.cache’(引擎)

SESSION_CACHE_ALIAS= ‘default’  使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置

1、    如果是文件session, 需要在settings.py中配置如下:

SESSION_ENGINE = ‘django.contrib.sessions.backends.file’ (引擎)

SESSION_FILE_PATH=None  缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()   

2、    如果是缓存+数据库session,需要在settings.py中配置如下:

SESSION_ENGINE=’django.contrib.sessions.backends.cached_db’       (引擎)

 

转载自:https://www.cnblogs.com/zhaof/p/6281468.html

### Django使用 Session 保持会话的指南 在 Django 中,Session 是一种强大的工具,用于在用户的多次请求之间保存状态信息。以下是关于如何配置和使用 Django Session 的详细介绍。 #### 配置 Session 功能 为了使 Django 支持 Session 功能,需要确保以下两项已正确配置: 1. **`MIDDLEWARE` 设置** 在 `settings.py` 文件中的 `MIDDLEWARE` 列表中添加 `'django.contrib.sessions.middleware.SessionMiddleware'`,这是启用 Session 功能的关键中间件[^1]。 2. **`INSTALLED_APPS` 设置** 同样,在 `settings.py` 文件中的 `INSTALLED_APPS` 列表中添加 `'django.contrib.sessions'` 应用程序。该应用程序提供了必要的数据库模型和其他支持功能来管理 Session 数据[^3]。 完成上述两步后,Django 就可以正常处理 Session 请求了。 --- #### 存储与读取 Session 数据 一旦启用了 Session 功能,就可以通过 `request.session` 对象轻松存储和检索数据。下面是一个简单的例子,展示了如何操作 Session 数据: ```python from django.http import HttpResponse def set_session(request): request.session['key'] = 'value' return HttpResponse('Session 已设置') def get_session(request): value = request.session.get('key', '默认值') return HttpResponse(f'Session 值为: {value}') ``` - 上述代码片段演示了如何向 Session 添加键值对 (`set_session`) 并从中获取值 (`get_session`)。 - 如果指定的键不存在,则可以通过 `.get()` 方法提供一个默认返回值[^4]。 --- #### 删除 Session 数据 如果不再需要某些 Session 数据,可以直接将其删除。例如: ```python def delete_session(request): if 'key' in request.session: del request.session['key'] return HttpResponse('Session 被成功删除') else: return HttpResponse('没有找到对应的 Session 键') ``` 这段代码检查是否存在名为 `'key'` 的 Session 条目,并在存在的情况下将其移除。 --- #### 自定义 Session 行为 除了基本的操作外,还可以自定义一些高级行为,例如调整超时时间或强制清除过期的 Session 记录。 1. **设置全局超时时间** 可以通过修改 `SESSION_COOKIE_AGE` 参数来自定义整个项目的 Session 过期时间(单位为秒)。例如: ```python SESSION_COOKIE_AGE = 1209600 # 默认两周 (1209600 秒) ``` 2. **单个 Session 的个性化超时** 若要针对某个特定用户设定不同的超时策略,可以在视图函数中调用 `set_expiry()` 方法: ```python def custom_timeout(request): request.session.set_expiry(3600) # 半小时后失效 return HttpResponse('设置了个性化的 Session 超时时间') ``` 3. **集成安全扩展** 若希望进一步增强安全性,可考虑引入第三方库如 `django-session-security`。它允许开发者更精细地控制用户会话的安全性,例如通过设置警告时间和自动登出时间实现更高的防护水平[^2]。 --- #### 注意事项 - 默认情况下,Django 使用数据库作为 Session 的存储后端。这意味着每次写入或读取 Session 数据都会涉及一次数据库查询。 - 如果性能成为瓶颈,可以选择其他存储方式,例如缓存(Redis 或 Memcached),只需更改 `SESSION_ENGINE` 和相关参数即可[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值