request.session.set_expiry(10) #设置10s后session失效
request.session.get_expire_at_browser_close() #查看session是否在浏览器关闭后失效

django的session默认都保存在django_session表里

在pathon中查看session:
from django.contrib.sessions.models import Session
Session.objects.all()
s=Session.objects.get(pk='y6n24k3l19a94h2vy999o2i4zsb7vcaa')
s.get_decoded() #查看该session的username
s.expire_date #查看该session的过期时间


set_expiry():
* 如果value是个整数,session会在些秒数后失效。
* 如果value是个datatime或timedelta,session就会在这个时间后失效。
* 如果value是0,用户关闭浏览器session就会失效。
* 如果value是None,session会依赖全局session失效策略。

get_expiry_date() #查看session失效时间
get_expiry_age() #查看session失效时长
get_expire_at_browser_close() #查看session是否在浏览器关闭后失效


django session默认2周后失效,关闭浏览器也不失效。
使用set_expiry()方法设置session失效时间,这样设置后,关闭浏览器session还不会失效,只有当时间到了才会失效。


修改settings.py设置浏览器关闭后失效:
1.在settings.py最后一行添加 SESSION_EXPIRE_AT_BROWSER_CLOSE=True
2.清空已保存的session:delete from django_session
3.清空IE缓存
4.重新测试OK,使用print request.session.get_expire_at_browser_close()查看session是否在浏览器关闭后失效

django保存在数据库中的session,如果用户主动退出,session会自动清除,如果没有退出就一直保留,记录数越来越大,要定时清理没用的session。

任务计划定时运行命令

python manage.py clearsessions(未测试)

django-admin.py cleanup

 

只使用session的方式,无需再使用cookie方式。session其实是依赖于Cookie的,如果浏览器不支持Cookie的话,Django的Session也就无从用起了,因为Session的生成是根据Cookie里面记录的SESSION_COOKIE_NAME来生成的.

request.session.test_cookie_worked() #测试客户端是否支持cookie

Django中的Session和Cookie管理: