吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 991|回复: 7
收起左侧

[讨论] 关于django使用session和cookies验证登录状态的问题

  [复制链接]
super谦 发表于 2021-8-19 10:17
前段时间,我在b站看了关于django的教学视频,视频里老师验证登录状态是利用session和cookies实现的,也就是说登录状态的保存通过session和cookies保存,代码如下:
def check_login(fn):
    def warp(request, *args, **kwargs):
        if 'username' not in request.session or 'id' not in request.session:
            c_username = request.COOKIES.get('username')
            c_id = request.COOKIES.get('id')
            if not c_username or not c_id:
                return HttpResponseRedirect('/user/login')
            else:
                request.session['username'] = c_username
                request.session['id'] = c_id
        return fn(request, *args, **kwargs)
    return warp


他是通过装饰器封装验证登录状态的函数

但是这里我就有点疑问了,代码里,他首先查看的是session是否有登录的状态,当session没有后,再查看cookies中是否有登录状态,那么,为什么不能直接就只用cookies来验证登录状态,而是要同时使用两个?有点小懵

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

fanai 发表于 2021-8-19 10:49
这个代码写法很有问题。。。至少应该是检查 cookie与session保持一致才算登陆态验证成功
 楼主| super谦 发表于 2021-8-19 11:41
fanai 发表于 2021-8-19 10:49
这个代码写法很有问题。。。至少应该是检查 cookie与session保持一致才算登陆态验证成功

那session过期了,cookies没过期,那不是没法验证是否保持一致
晚空 发表于 2021-8-19 11:43
session是存在服务器上的。cookies 是存在用户浏览器里的。
这种是最简单的效验。应该就是老师作为例子。
一般情况是直接使用JWT来做效验
anandyuan 发表于 2021-8-19 12:13
1.session储存在服务端,比cookie安全,如果存储在session端的数据校验不通过那就没必要再去校验cookie了;
2.session默认缓存在内存中,读取更快;
3.用户可编辑和伪造cookie,如果cookie的设置机制过于简单,则可伪造cookie,这时再没有session校验,即可轻松骗过服务端
 楼主| super谦 发表于 2021-8-19 14:01
anandyuan 发表于 2021-8-19 12:13
1.session储存在服务端,比cookie安全,如果存储在session端的数据校验不通过那就没必要再去校验cookie了; ...

按照您的说法,是只要session不要cookies也行吗,那么按照正常的验证登录的写法和方式应该是怎么样的呢
anandyuan 发表于 2021-8-19 15:38
super谦 发表于 2021-8-19 14:01
按照您的说法,是只要session不要cookies也行吗,那么按照正常的验证登录的写法和方式应该是怎么样的呢

1.session有效期短,超过一段时间不访问就会被释放掉;2.当存在多台服务器(多节点部署)时,再次请求可能会被分配到另一台服务器,如果session没持久化存储可能这台服务器就不能分辨你是哪个用户,3.访问用户过多时会占用服务器资源,考虑到减轻服务器性能方面,应当使用cookie,
其实完全可以只使用cookie或session,仅使用session或cookie达到的效果可能没那么好,二者结合起来可能达到意想不到的效果。
初学时老师可能只是为了让同学们弄懂理解即可,也许当你学的差不多时再回过来看这些问题就会又明白很多。
fanai 发表于 2021-8-20 10:42
super谦 发表于 2021-8-19 11:41
那session过期了,cookies没过期,那不是没法验证是否保持一致

session过期了就重新登陆或刷新
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 22:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表