要求:“/operate”为受限制区域,要求必须登录;登录后若长时间不用,则自动logout
实现:django middleware非常适合这个要求,和java的filter差不多
from django.conf import settings
from django.contrib import auth
from datetime import datetime, timedelta
from django.http import HttpResponse,HttpResponseRedirect
class AutoLogout:
  def process_request(self, request):
    if request.path.startswith("/operate"):
#        print '***********************************************'
        if  not request.user.is_authenticated() :
            auth.logout(request)
            return HttpResponseRedirect("/")
    if not request.user.is_authenticated() :
      return
    try:
      if datetime.now() - request.session['last_touch'] > timedelta( 0, settings.AUTO_LOGOUT_DELAY * 60, 0):
        auth.logout(request)
        del request.session['last_touch']
        return
    except KeyError:
      pass

    request.session['last_touch'] = datetime.now()
评论
duka 2008-06-25
建议
if request.path.startswith("/operate"):
改写成
if request.path.startswith("/operate/"):
hama 2008-06-11
我用的是基于数据库的session,怎么做到关闭浏览器后,session就失效?
hellas 2008-04-29
可以在setting里面设置SESSION_COOKIE_AGE(单位:秒),缺省是两个星期。
andrewleung 2008-04-28
在Java里的web.xml设置
<session-config>
<session-timeout>30</session-timeout>
</session-config>
超过这个时间就需要重新登录,不知道Django里面有没有类似的设置啊
而不是写代码来判断
发表评论

提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则

您还没有登录,请登录后发表评论

hanyh
搜索本博客
最近加入圈子
存档
最新评论