|
|
1
56
这个答案是在原始问题发布五年后发布的,但这个SO线程是搜索这个问题的解决方案时谷歌最热门的结果之一(Django仍然不支持它)。
对于只关心登录用户会话的用例,我有一个替代解决方案,它使用了额外的
然后,您可以简单地保存一个新的
最后,当您想列出(并可能清除)特定用户的会话时:
这就是它的细节,如果你想了解更多细节,我有一个 blog post 覆盖它。 |
|
|
2
31
我找到了这段代码片段
在这里 http://scottbarnham.com/blog/2008/12/04/get-user-from-session-key-in-django/ 尚未验证,但看起来很直接。 |
|
|
3
28
这有点棘手,因为并非每个会话都必须与经过身份验证的用户相关联;Django的会话框架也支持匿名会话,任何访问你网站的人都会有一个会话,无论他们是否登录。 由于会话对象本身是序列化的,这使得情况变得更加棘手——因为Django无法知道你到底想存储哪些数据,它只是将会话数据字典序列化为字符串(使用Python的标准“pickle”模块),并将其填充到你的数据库中。 如果你有会话密钥(它将由用户的浏览器作为cookie值“sessionid”发送),获取数据的最简单方法就是在session表中查询具有该密钥的会话,这将返回一个session对象。然后,您可以调用该对象的“get_coded()”方法来获取会话数据字典。如果你没有使用Django,你可以查看源代码(Django/contrib/sessions/models.py),看看会话数据是如何反序列化的。 但是,如果你有用户id,你需要遍历所有Session对象,对每个对象进行反序列化,并寻找一个具有名为“_auth_user_id”的键,并且该键的值是用户id的对象。 |
|
|
4
26
修改
叉起
如果你不想分叉,你可以尝试连接到
或者你可以使用MonkeyPatch
还有一种方法是放入2个(是的,两个)中间件类——一个在之前,一个在之后
我们使用了最后一种技术的变体,为搜索引擎蜘蛛创建了伪会话,使它们能够特殊访问通常仅限成员的材料。我们还检测入站链接,其中
更新: 我的答案现在已经相当古老了,尽管它仍然基本正确。请参阅下面@Gavin_Ballard的最新答案(2014年9月29日),了解解决这个问题的另一种方法。 |
|
|
5
7
彼得·罗威尔,谢谢你的回复。这是一个巨大的帮助。这就是我让它工作的方法。只需更改djang.contrib.sessions中的一个文件。 在django/contrib/sessions/models.py中,将user_id添加到表中(手动添加到DB表中或删除表并运行manage.py syncdb)。
现在,在您登录的视图中(如果您使用django的基本登录,则必须覆盖它)
这对我奏效了。 |
|
|
6
6
当我想赶走一个垃圾邮件发送者时,我遇到了这个问题。似乎将他们的帐户设置为“非活动”是不够的,因为他们仍然可以参加上一次会议。那么,如何删除特定用户的会话,或者如何故意使特定用户的一个会话过期呢?
答案是用户
|
|
|
Erik · PHP:确定会话过期时间 1 年前 |
|
|
xms · PHP HTTPOnly Cookie及其对会话的影响 1 年前 |
|
|
Tunahan Keklik · 如果用户仍在网站上时会话过期怎么办 2 年前 |
|
|
J.H · Nestjs服务器在Vercel部署一段时间后自动重新加载 2 年前 |
|
|
Michael Ding · Rails上的默认会话到期问题 2 年前 |
|
|
Patrick Visi · Zitadel日常创建服务用户 2 年前 |
|
|
newbie_php · php会话值丢失 2 年前 |