python session过期_设置session过期时间

本文详细介绍了登录功能的实现方法,包括用户验证、记住密码功能及session有效期的设置方式。此外还探讨了不同存储方式下的session管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1如下是登录注册和记住密码的功能:

# -*- coding: utf-8 -*-

def cms_login(request):

if request.method == 'GET':

return render(request,'cms_login.html')

else:

form = LoginForm(request.POST)

if form.is_valid():

# user = UserModel(username=username)

# user.password == hash(password)

username = form.cleaned_data.get('username',None)

password = form.cleaned_data.get('password',None)

#if hash(password) == AuthorModel.objects.filter().first().password

user = authenticate(username=username,password=password)

if user and user.is_active:

login(request,user)

if remember:

request.session.set_expiry(None)

else:

request.session.set_expiry(0)

nexturl = request.GET.get('next')

# return redirect(reverse('cms_index'))

print 'nexturl=',nexturl

if nexturl:

return redirect(nexturl)

else:

return redirect(reverse('cms_index'))

else:

return render(request,'cms_login.html',{'errors':u'用户名或密码错误'})

else:

return render(request,'cms_login.html',{'errors':form.errors})

如何设置sessiond的过期时间:

session的有效期时间是通过request.session.set_expiry(value)进行设置的。

如果value是一个int类型,那么session将在value这个时间后过期,其中value代表的是秒。

如果value是一个datetime或者timedelta对象,那么这个session将在指定的时间后过期。datetime必须是使用了PickleSerializer进行序列化的。

如果value等于0,那么session将在web浏览器关闭后就直接过期。

如果value等于None,那么session将用settings.py中设置的全局过期字段SESSION_COOKIE_AGE,这个字段默认是14天,也就是2个礼拜。

读session的时候不会修改session的有效期,修改session的时候会重新设置session的有效期,会从修改的时间,重新计时。

如果settings.py中设置了SESSION_EXPIRE_AT_BROWSER_CLOSE=True,那么默认讲不再使用SESSION_COOKIE_AGE了,而是浏览器一关闭,session数据就会过期。这个值默认是为False。

session保存的设置:

session可以保存在文件,数据库,缓存以及cookie中,要设置session的保存路径,需要在settings.py中设置SESSION_ENGINE:

基于缓存的:django.contrib.sessions.backends.cache,如果设置缓存的,那么session中的所有数据将存储在内存中。同时,需要在settings.py中配置CACHES,一般我们使用memcached作为缓存,通过以下代码进行配置:

CACHES = {

'default': {

'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',

'LOCATION': '127.0.0.1:11211'

}

}

基于文件存储的:django.contrib.sessions.backends.file,那么需要配置SESSION_FILE_PATH来控制缓存的文件路径。

基于cookie的:django.contrib.sessions.backends.signed_cookies,那么所有的session数据都会被保存在cookie中。

基于数据库的:如果不配置SESSION_ENGINE,那么默认就是使用数据库来作为存储,如果需要显示配置,那么配置项是django.contrib.sessions.backends.db。

基于数据库+缓存的:django.contrib.sessions.backends.cached_db,这种情况,每次往缓存中写数据的时候,都会同步到数据库中,来做一个持久化。每次读session数据的时候,都优先从缓存中查找,如果缓存中没有这个值了,才从数据库中查找。

如何清除sessions数据:

session默认只是过期,为了考虑到数据的需要,django并不会从数据库或者文件中删除,所以这个要运维人员或者后台管理人员手动的清除那些已经过期了的session,最快捷的方式是通过命令定时的删除:python manage.py clearsessions,当然,如果backend是存储在cookie或者缓存中,那么他们将在过期后自动删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值