【问题标题】:Renew session_key django更新 session_key django
【发布时间】:2014-09-20 21:30:47
【问题描述】:

我正在尝试编写一个函数来获取已登录人员的username,然后立即将 de session_key 更改为新的。

到目前为止我写的是这样的:

def get_username(request):
    try:
        for coisa in request:
            session_key = coisa  # This seems to be wrong, but it works
        session = Session.objects.get(session_key=session_key)
        user_id = session.get_decoded().get('_auth_user_id')
        user = User.objects.get(id=user_id)   # Works very well until here, trust me
        session.cycle_key()     #this is where I'm getting the error
        return HttpResponse(user.username)
    except Exception, e:
        print 'Erro: ' + str(e)
        return HttpResponseServerError(str(e))

我传递的请求变量不是通常的 django 请求,它是由 javascript 脚本构建的请求,其数据上只有 session_key。

我得到的错误是:'Session' object has no attribute 'cycle_key'

我在这个函数上使用的 session_key 来自一个在页面加载时运行的函数,所以 request 是来自 django 的“正常”请求变量:

session_key = request.session.session_key

【问题讨论】:

    标签: python django httprequest django-sessions


    【解决方案1】:

    我完全不明白你为什么要这么做。用户已经在request.user,所以不需要从会话中获取它,同样会话本身在request.session - 所以你可以做request.session.cycle_key()

    【讨论】:

    • 这个 get_username 函数将用于验证和设置登录聊天服务器(使用 node 和 socket.io)的人的用户名。我的方法是获取用户 ID 和 session_key来自 django 并比较它们。如果他们来自同一个用户,那么好的,我们可以继续,否则全部取消,但是这个函数是从聊天服务器调用的,所以它发送的请求与 django 不同。出于这个原因,我不能简单地做一个request.session.cycle_key()request.user
    【解决方案2】:

    cycle_key() 属于 session.backends.db.SessionStore (继承自 SessionBase),以及您尝试使用的内容 这里是models.Session,它是一个会话模型。通常 request.session IIRC 是 SessionStore 的一个实例。

    所以你需要在这里新建一个SessionStore。它使用会话密钥初始化:

    session = SessionStore(session_key)
    

    【讨论】:

    • 我试过了,但是这个错误:'SessionStore' object has no attribute '_session_cache'。我可以使用相同的 session_key 来获取两个对象吗?
    • 创建后尝试添加 session._session_cache = session.load() 。但是,我不确定您是否获得了正确的会话密钥。您的代码没有多大意义 - 您正在迭代请求并且仅使用其中的最后一个值设置为会话密钥。
    • 谢谢,我试试。这个循环确实很奇怪,但是当我打印所有结果时,我得到的只是关键,所以它有点工作。
    • 是的,但你正在有效地分配最后一项,即 session_key = request[-1]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 2020-02-22
    • 1970-01-01
    • 2021-12-26
    • 2020-07-29
    • 2022-01-23
    • 2017-04-19
    相关资源
    最近更新 更多