django 默认在用户密码变更时使旧会话失效,导致用户被登出;需调用 `update_session_auth_hash()` 保持登录状态。
在 Django 中,当用户密码被修改(尤其是通过 user.set_password() 或直接更新 user.password 字段)后,框架会自动使所有基于旧密码哈希生成的会话失效——这是出于安全考虑的默认行为:防止密码泄露后攻击者继续利用已存在的会话令牌。因此,即使用户仍在浏览页面,request.user 也会变为匿名(is_anonymous=True),看似“意外登出”。
你当前的视图中存在两个关键问题:
✅ 正确做法如下(已修复):
from django.contrib.auth import update_session_auth_hash
from django.contrib import messages
def psswdReset(request):
if request.method == 'POST':
new_psswd = request.POST.get('new_psswd')
psswd = request.POST.get('psswd')
# 验证原密码(注意:check_password 接收明文 vs 哈希)
if check_password(psswd, request.user.password):
user = request.user # 直接使用 request.user,无需重复查询
user.set_password(new_psswd) # ✅ 推荐方式:自动处理加密与兼容性
user.save()
# ✅ 关键一步:更新当前会话的认证哈希,避免登出
update_session_auth_hash(request, user)
messages.success(request, 'Password changed successfully!')
return render(request, 'User/userPsswdReset.html', {})
return render(request, 'User/userPsswdReset.html', {})⚠️ 注意事项:
总结:Django 的会话自动失效机制是主动的安全防护,而非 bug;正确使用 update_session_auth_hash() 即可
在保障安全的前提下提供无缝的密码更新体验。
# word
# html
# go
# 浏览器
# session
# django
# 安全防护
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
Python函数接口稳定性_版本演进解析【指导】
c# await 一个已经完成的Task会发生什么
Python性能剖析高级教程_cProfileLineProfiler优化案例解析
windows 10专注助手怎么关闭_windows 10禁用通知提醒功能方法
Win11如何设置文件权限 Win11 NTFS文件夹所有权与安全设置【高级】
Win10电脑怎么设置网络名称_Windows10注册表NetworkList修改
如何解决同一段404代码在不同主机上表现不一致的问题
Python路径拼接规范_跨平台处理说明【指导】
Win11怎么打开注册表_Windows 11注册表编辑器启动命令【步骤】
PHP中require语句后直接调用返回对象方法的语法解析
Win11如何设置环境变量 Win11添加和修改系统与用户变量【教程】
如何用正则表达式精确匹配最多含一个换行符的起止片段
c++的STL算法库find怎么用 在容器中查找指定元素【实用教程】
如何用列表一次性对 DataFrame 的指定列应用字典映射
mac怎么分屏_MAC双屏显示与分屏操作技巧【指南】
c++ namespace命名空间用法_c++避免命名冲突
如何使用Golang实现路由参数绑定_使用Mux和Request解析路径变量
如何在 Go 中正确反序列化多个并列的 XML 元素(而非 XML 数组)
如何在Golang中处理URL参数_Golang URL参数解析与路由映射方法
Win11怎么关闭系统声音_Win11系统提示音静音设置【详解】
Mac的“预览”如何合并多个PDF_Mac文件处理技巧【效率】
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
Drupal 中 HTML 链接被双重转义导致渲染异常的解决方案
php485在php5.6下能用吗_php485旧版本兼容性问题说明【详解】
使用类变量定义字符串常量时的类型安全最佳实践
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
Laravel 查询 JSON 列:高效筛选包含数组中任意值的记录
Mac如何修改Hosts文件?(本地开发与屏蔽网站)
如何使用Golang捕获并记录协程panic_保证主程序稳定运行
MAC如何启用访达侧边栏显示_MAC Finder偏好设置与常用目录添加【教程】
MySQL 中使用 IF 和 CASE 实现查询字段的条件转换
Windows10无法连接到Internet_Win10网络重置命令详解
Win11怎么关闭SmartScreen_禁用Windows Defender筛选器教程【步骤】
Win11怎么设置鼠标宏_Win11鼠标按键自定义编程教程【详解】
如何提升Golang程序I/O性能_Golang I/O密集型程序优化示例
c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】
Win10路由器怎么隐藏ssid Win10隐藏wifi名称设置【指南】
如何在 ACF 中正确更新嵌套多层的 Group 字段子字段
Windows笔记本无法进入睡眠模式怎么办?(电源疑难解答)
php转mp4怎么保留字幕_php处理带字幕视频转换说明【说明】
Win11怎么开启专注模式_Windows11时钟应用Focus Session
如何从 Go 的 map[string]interface{} 中安全获取值
Windows11怎样开启游戏模式_Windows11游戏模式开启攻略【方法】
Windows怎样关闭桌面弹窗广告_Windows关闭桌面弹窗设置【教程】
Win10 BitLocker加密教程 Win10给磁盘驱动器上锁【安全】
如何在 ACF 中正确更新嵌套多层 Group 字段内的子字段
如何高效删除 NumPy 二维数组中所有元素相同的列
Win11 C盘满了怎么清理 Win11磁盘清理和存储感知使用教程【新手必看】
Windows怎样拦截WPS弹窗广告_Windows拦截WPS弹窗广告设置【步骤】
Linux怎么禁止Root用户远程登录_Linux系统SSH加固与安全设置【教程】
2026-01-01
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。