`
guotie
  • 浏览: 19853 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

django session的问题

阅读更多
django中的session, 只能对所有人使用统一的超时机制。这对于用户来说,不是很好的选择,例如有些用户希望不保留session,而有些用户希望保留。

请教,在django中,如何实现根据用户的不同选择(保留/或者不保留)来保存session?
分享到:
评论
1 楼 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的原设定. 代码其实不多,但可能要考虑仔细些


随手写的,可能有遗漏的地方,欢迎补充

相关推荐

Global site tag (gtag.js) - Google Analytics