2007-12-08
django session的问题
django中的session, 只能对所有人使用统一的超时机制。这对于用户来说,不是很好的选择,例如有些用户希望不保留session,而有些用户希望保留。
请教,在django中,如何实现根据用户的不同选择(保留/或者不保留)来保存session?
请教,在django中,如何实现根据用户的不同选择(保留/或者不保留)来保存session?
评论
jjx
2007-12-09
你的要求最好用cookie来实现
不过基于django的开放性,也不是不可能实现,只是要改动的地方多些,下面提几个要点
1. django中的request.session是通过django.contrib.sessions.SessionMiddleware来完成的,request.session实际上并不是django.contrib.models.Session实例,而是settings.SESSION_ENGINE中指定模块的SessionStore实例,默认 的,就是django.contrib.sessions.backends.db.SessionStore
2. 将你的用户会话超时设置放在某个地方,比方说利用django user的profile机制存放session_timeout设置
3. 你要改动如下代码
①django.contrib.session.middleware中的将session写到cookie中的过程,你需要修改expires 参数到time.time+user.get_profile().session_timeout
②修改django.contrib.sessions.backends.db.SessionStore中的save方法
这里expire_date = datetime.datetime.now() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE)
中的seconds=settings.SESSION_COOKIE_AGE 要改成user.get_profile().session_timeout
修改这个方法的原因是django用expire_date__gt这个条件查找指定sesion_key的session
①中可以从request.user中取得user,但②中的user,你要想个办法传入或直接将session_timeout传到SessionStore实现上. (setattr(request.session,"sessin_timeout",user.get_profile().session_timeout)当获取用户时,你也要考虑用户没有登录的情况. 这样,就转用django的原设定. 代码其实不多,但可能要考虑仔细些
随手写的,可能有遗漏的地方,欢迎补充
不过基于django的开放性,也不是不可能实现,只是要改动的地方多些,下面提几个要点
1. django中的request.session是通过django.contrib.sessions.SessionMiddleware来完成的,request.session实际上并不是django.contrib.models.Session实例,而是settings.SESSION_ENGINE中指定模块的SessionStore实例,默认 的,就是django.contrib.sessions.backends.db.SessionStore
2. 将你的用户会话超时设置放在某个地方,比方说利用django user的profile机制存放session_timeout设置
3. 你要改动如下代码
①django.contrib.session.middleware中的将session写到cookie中的过程,你需要修改expires 参数到time.time+user.get_profile().session_timeout
②修改django.contrib.sessions.backends.db.SessionStore中的save方法
这里expire_date = datetime.datetime.now() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE)
中的seconds=settings.SESSION_COOKIE_AGE 要改成user.get_profile().session_timeout
修改这个方法的原因是django用expire_date__gt这个条件查找指定sesion_key的session
①中可以从request.user中取得user,但②中的user,你要想个办法传入或直接将session_timeout传到SessionStore实现上. (setattr(request.session,"sessin_timeout",user.get_profile().session_timeout)当获取用户时,你也要考虑用户没有登录的情况. 这样,就转用django的原设定. 代码其实不多,但可能要考虑仔细些
随手写的,可能有遗漏的地方,欢迎补充
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 4216 次
- 性别:

- 来自: 南京

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
django中文本内容的save的 ...
怎么样关闭自动转义啊?我要显示数据库中的网页标签代码啊!~~~
-- by badpeas -
求python写的验证码程序
guotie 写道如题。最好验证图形能复杂一些。 谢谢。 你真牛x。。。
-- by bcccs -
django中文本内容的save的 ...
是的,最新的svn加上去的。
-- by guotie -
django中文本内容的save的 ...
谢谢,我也遇到这个问题。这个功能好像是在0.97加的,我以前用的时候没有这个问题 ...
-- by zbird -
django中文本内容的save的 ...
原来是context.autoescape的问题。
-- by guotie






评论排行榜