1. django中怎么设置单个session的失效时间
set_expiry(value):设置cookie的有效期。可以传递不同类型的参数值:
• 如果值是一个整数,session将在对应的秒数后失效。例如request.session.set_expiry(300) 将在300秒后失效.
• 如果值是一个datetime或者timedelta对象, 会话将在指定的日期失效
• 如果为0,在用户关闭浏览器后失效
• 如果为None,则将使用全局会话失效策略
失效时间从上一次会话被修改的时刻开始计时。
详细参考:刘江的django教程
2. Django session是什么时候设置的
Django的session通过SessionMiddleware中间件实现,在视图函数开始前以及返回后执行中间件逻辑。
视图函数中的session['id']=1 是设置内存中的session对象的属性,而SessionMiddleware的工作是将session对象按指定方式序列化,例如转换为cookie。
3. django session只能存一个吗
1. 将Session存储在数据库中:
如果要将Session存储在数据库中,我们需要将 ’django.contrib.sessions’ 加入到INSTALLED_APPS 变量中。然后运行 manage.py syncdb 在数据库中创建相应的存储Session的数据库表。
2. 将Session存储在缓存中:
如果想获得更好的性能,我们可以将Session保存在缓存中。这里有两种配置方式:一种是设置SESSION_ENGINE 为”django.contrib.sessions.backends.cache” 。这是一种简单配置,Session将之被保存在缓存中,但是不保证Session总是能取到(比如缓存溢出时Session会丢失);另一种方式是设置SESSION_ENGINE 为 “django.contrib.sessions.backends.cached_db”。这种方式下,Session在保存到缓存的同时还会被保存到数据库中,当Django在缓存中找不到Session时,会从数据库中找到。第二种方式会有一点点性能开销,但是安全性和冗余性更好。
3. 将Session存储在文件系统中:
最后一种方式是将Session存储在文件系统中。需要设置SESSION_ENGINE 为”django.contrib.sessions.backends.file”,这时你还需要同时设置SESSION_FILE_PATH 变量,它代表Session文件保存的位置,缺省的设置一般是tempfile.gettempdir(),表示系统的临时目录。这里要确保应用程序对那个目录有读写的权限。
4. django中的通用视图(类视图),如何获得和设置session
HttpSession session = request.getSession();
session.getAttribute(“名称”);------得到session放入进去的信息。
session.getAttributeNames()-----得到session里面所有的信息名称。
session.getMaxInactiveInterval()----得到session最大存活时间。
seesion.getId();------得到session的id。比较有用的属性,可以实现共享session。
session.getCreationTime()-----session创建时间。
。。。。。。。。。。。
还有比较多的属性都可以得到session的配置信息。同样,也可以在web.xml文件中通过<session-config>设置session的属性。
5. vue+django使用session的用户验证怎么做
和朋友合作一个小项目,我负责前端,他负责后台,目前对用户登陆验证这块不太明白应该怎么做。了解了下有传统session的方式和access token的方式。
access token的方式我大概明白前端的工作具体怎么做,用户名密码验证通过后后台返回一个token,以后前端路由加http拦截所有的请求头都要附上这个token。但是后台的操作会比较麻烦。
6. django 中session 怎么设置timeout
Django 完全支持匿名 Session Session 框架允许每用户保存并取数据数据保存服务器端并发送接收 Cookie 操作包装起 Cookie 包含 Session ID数据本身 启用 Sessions¶ Session 通 间件 式实现 要启用 Session 功能需要完步骤: 修改 MIDDLEWARE_CLASSES 设置并确定其包含 'django.contrib.sessions.middleware.SessionMiddleware' ``django-admin.py startproject`` 所创建缺省 settings.py 已经激 SessionMiddleware 'django.contrib.sessions' 添加 INSTALLED_APPS 设置并执行 manage.py syncdb 便安装用于存储 Session 数据表格 Changed in Django 依.0: 并未使用数据库存储 Session则步骤忽略;参考 配置 Session 引擎 If you don’t want to use sessions, you might as well remove the SessionMiddleware line from MIDDLEWARE_CLASSES and 'django.contrib.sessions' from your INSTALLED_APPS. It’ll save you a small bit of overhead. 配置 Session 引擎¶ New in Django 依.0.. 缺省情况Django Session 存储数据库 (使用模型 django.contrib.sessions.models.Session)尽管便某些情况 Session 放其速度更快 Django 允许您通配置让 Session 数据保存文件系统或缓冲区 使用基于文件 Session¶ 要使用基于文件 Session请 SESSION_ENGINE 设置 "django.contrib.sessions.backends.file" 您能需要修改 SESSION_FILE_PATH 设置便控制 Django 存储 Session 文件位置缺省情况使用 tempfile.gettempdir() 通 /tmp 使用基于缓冲区 Session¶ 要使用 Django 缓冲区系统保存 Session需要 SESSION_ENGINE 设置 "django.contrib.sessions.backends.cache" 您必须确保您已经配置缓冲区详情请参考 缓冲区文档 Note 使用 Memcached 作缓冲台才能使用基于缓冲区 Session本内存作缓冲台存储缓冲数据间太短直接访问文件或数据库速度要比通缓冲区访问文件或数据库速度更快些 视图使用 Session¶ 启 SessionMiddleware 每 HttpRequest 象 (Django 视图函数第参数) 救火 session 属性类字典象您直接其读写 Session 象标准字典函数: __getitem__(key) 例: fav_color = request.session['fav_color'] __setitem__(key, value) 例: request.session['fav_color'] = 'blue' __delitem__(key) 例: del request.session['fav_color']. This raises KeyError if the given key isn’t already in the session. __contains__(key) 例: 'fav_color' in request.session get(key, default=None) 例: fav_color = request.session.get('fav_color', 'red') keys() items() setdefault() clear() New in Django 依.0: setdefault() clear() 版本新加 : flush() New in Django 依.0. 数据库删除前 Session 数据并且重新 Session 键并其发送给浏览器用于需要确保 Session 数据再用户浏览器访问譬调用 django.contrib.auth.logout() set_test_cookie() 设定检测 Cookie 检验用户浏览器否支持 Cookie Cookie 工作式用户请求前您都测试结详情参考面 设置检测 Cookie test_cookie_worked() 判断用户浏览器否收检测 Cookie并返 True 或 False Cookie 工作式您必须前独立请求调用 set_test_cookie() 详情参考面 设置检测 Cookie delete_test_cookie() 删除检测 Cookie请自调用函数便清除该 Cookie set_expiry(value) New in Django 依.0. 设定 Session 期间您提供述几种形式值: value 整形则表示秒例调用 request.session.set_expiry(三00) 让 Session 五钟期 value datetime 或 timedelta 象则 Session 相应期或间点期 value is 0 则用户 Session 浏览器关闭期 value is None 则 Session 使用全局策略设定期间 get_expiry_age() New in Django 依.0. 获 Session 期间于没自定义期间 Session (或浏览器关闭期 Session)函数返值与 settings.SESSION_COOKIE_AGE 相同 get_expiry_date() New in Django 依.0. 获 Session 期间点于没自定义期间 Session (或浏览器关闭期 Session)函数返值等于现间点 settings.SESSION_COOKIE_AGE 秒数 get_expire_at_browser_close() New in Django 依.0. 返 Session 否浏览器关闭期返值 True 或 False 您视图任何位置都修改 request.session 改少都行 Session 象指南¶ 直接 request.session 使用 Python 字符串作字典键比使用 Session 象更直接 Session 字典划线始键保留给 Django 内部使用 要用新象覆盖 request.session 要访问或修改属性能作类字典象使用 例¶ 简单视图用户提交评价信息变量 has_commented 设定 True 防止用户提交评价信息: def post_comment(request, new_comment): if request.session.get('has_commented', False): return HttpResponse("You've already commented.") c = comments.Comment(comment=new_comment) c.save() request.session['has_commented'] = True return HttpResponse('Thanks for your comment!') 简单视图让中国站用户登录: def login(request): m = Member.objects.get(username=request.POST['username']) if m.password == request.POST['password']: request.session['member_id'] = m.id return HttpResponse("You're logged in.") else: return HttpResponse("Your username and password didn't match.") ...与面例相应面例则让用户退: def logout(request): try: del request.session['member_id'] except KeyError: pass return HttpResponse("You're logged out.") 实际标准 django.contrib.auth.logout() 做些事情防止疏忽造数据泄露调用 request.session.flush() 函数我使用些例演示何操作 Session 象完整 logout() 实现 设置检测 Cookie¶ 便起见Django 提供种简单检测用户浏览器否支持 Cookie要请求调用 request.session.set_test_cookie() 并续请求调用 request.session.test_cookie_worked() 即注意千万要同请求同调用 所要两请求调用 set_test_cookie() test_cookie_worked() Cookie 工作模式您设定 Cookie 再请求前都没办知道浏览器否接收 另外测试完毕使用 delete_test_cookie() 清除测试用数据 典型例: def login(request): if request.method == 'POST': if request.session.test_cookie_worked(): request.session.delete_test_cookie() return HttpResponse("You're logged in.") else: return HttpResponse("Please enable cookies and try again.") request.session.set_test_cookie() return render_to_response('foo/login_form.html') 视图外使用 Session¶ New in Django 依.0. API 专门用于视图外操作 Session 数据: >>> from django.contrib.sessions.backends.db import SessionStore >>> s = SessionStore(session_key='贰b依依吧9a依吧吧b四四ad依吧c三5e依依三ac陆ceead') >>> s['last_login'] = datetime.datetime(贰005, 吧, 贰0, 依三, 三5, 依0) >>> s['last_login'] datetime.datetime(贰005, 吧, 贰0, 依三, 三5, 0) >>> s.save() 您使用 django.contrib.sessions.backends.db 台则每 Session 都普通 Django 模型模型 Session 文件 django/contrib/sessions/models.py 定义由于普通模型您使用 Django 数据库编程接口直接访问: >>> from django.contrib.sessions.models import Session >>> s = Session.objects.get(pk='贰b依依吧9a依吧吧b四四ad依吧c三5e依依三ac陆ceead') >>> s.expire_date datetime.datetime(贰005, 吧, 贰0, 依三, 三5, 依贰) 注意要获 Session 字典需要调用 get_decoded() 字典编码式存储: >>> s.session_data 'KGRwMQpTJ依9hdXRoX三VzZXJfaWQnCnAyCkkxCnMuMTExY贰ZjODI贰Yj...' >>> s.get_decoded() {'user_id': 四贰} Session 何存储¶ 缺省情况Django Session 修改才保存即字典值修改或删除: # Session is modified. request.session['foo'] = 'bar' # Session is modified. del request.session['foo'] # Session is modified. request.session['foo'] = {} # Gotcha: Session is NOT modified, because this alters # request.session['foo'] instead of request.session. request.session['foo']['bar'] = 'baz' 于面通显示设定 Session 象 modified 属性通知 Session 象修改: request.session.modified = True 要改变种行 SESSION_SAVE_EVERY_REQUEST 设定 True SESSION_SAVE_EVERY_REQUEST True 则 Django 每独立请求都保存 Session 注意创建或修改 Session 候才送 Session Cookie SESSION_SAVE_EVERY_REQUEST True 则每请求都送 Cookie 同送 Cookie expires 部每都更新 与浏览器同步 Session 持久 Session¶ 通设置 SESSION_EXPIRE_AT_BROWSER_CLOSE 您控制 Session 框架使用与浏览器同步 Session 或持久 Session 缺省情况 SESSION_EXPIRE_AT_BROWSER_CLOSE 值 False 表示 Session Cookie 保存用户浏览器直超 SESSION_COOKIE_AGE 您希望用户必每关闭浏览器都重新登陆请使用种式 SESSION_EXPIRE_AT_BROWSER_CLOSE 设定 True 则 Django 使用与浏览器同步 Cookie即用户关闭浏览器 Cookie 期您希望用户每打浏览器都必须登录请使用种模式 New in Django 依.0. 设置具全局缺省值通调用 request.session.set_expiry() 每 Session 设定独立值相关内容述 视图使用 Session 所阐述 清空 Session 表格¶ 注意Session 数据能堆积数据库表格 django_session Django 提供 自清除功能定期清空 Session 数据任务留给您 要理解问题想像用户使用 Session 发用户登录Django 向表格 django_session 添加条记录每 Session 数据变化Django 更新条记录用户手工退Django 删除用户 没 退则条记录永远都删除 Django 提供能够完清除功能例脚本 django-admin.py cleanup Session 表格删除些 expire_date 已经期记录您应用程序能其需求 设置¶ 些 Django 设置 帮助您控制 Session 行: SESSION_ENGINE¶ New in Django 依.0. 缺省值: django.contrib.sessions.backends.db 控制 Django 何处保存 Session 数据合值: 'django.contrib.sessions.backends.db' 'django.contrib.sessions.backends.file' 'django.contrib.sessions.backends.cache' 详情请参考 配置 Session 引擎 SESSION_FILE_PATH¶ New in Django 依.0. 缺省值: /tmp/ 您使用基于文件 Session 存储则变量控制着 Django 存储 Session 数据目录 SESSION_COOKIE_AGE¶ 缺省值: 依贰09陆00 (两周秒表示) Session Cookie 期间秒表示 SESSION_COOKIE_DOMAIN¶ 缺省值: None Session Cookie 域要设定跨域 Cookie其设定 ".lawrence中国" 形式否则请使用 None SESSION_COOKIE_NAME¶ 缺省值: 'sessionid' Session 所使用 Cookie 名称根据需要设定 SESSION_COOKIE_SECURE¶ 缺省值: False 于 Session Cookie否要使用安全模式设定 True 则 Cookie 标记安全种情况浏览器需要确定该 Cookie 否通 HTTPS 连接发送 SESSION_EXPIRE_AT_BROWSER_CLOSE¶ 缺省值: False 否用户关闭浏览器让 Session 期详情参考文 与浏览器同步 Session 持久Session SESSION_SAVE_EVERY_REQUEST¶ 缺省值: False 否每请求都保存 Session 数据项 False (缺省值)则 Session 数据修改才保存即字典值赋值或删除 技术细节¶ Session 字典接受任何与 pickle 兼容 Python 象详情参考 pickle 模块 Session 数据存储数据库表格 django_session Django 需要候才发送 Cookie您没设定任何 Session 数据送 Cookie URL Session ID¶ Django Session 框架完全基于 Cookie 并且能基于 Cookie像些软件(譬 PHP) Session 能工作 Session ID 放 URL 作决定经深思熟虑种仅使 URL 丑陋并且 Session ID 能通 Referer 泄漏给中国站带安全隐
7. django 使用自带logout会删除session么
deflogout(request):
"""
Removestheauthenticateser'
sessiondata.
"""
#
#chancetofindout*who*loggedout.
user=getattr(request,'user',None)
ifhasattr(user,'is_authenticated')andnotuser.is_authenticated():
user=None
user_logged_out.send(sender=user.__class__,request=request,user=user)
request.session.flush()
ifhasattr(request,'user'):
fromdjango.contrib.auth.modelsimportAnonymousUser
request.user=AnonymousUser()
上面就是django的logout代码,django并没有真正的删除session,只是取消了和当前浏览器的关联,也就是删除了sessionid。
如果解决了您的问题请采纳!
如果未解决请继续追问!
8. 如何使用django session
Django 完全支持匿名 Session。 Session 框架允许每一个用户保存并取回数据。它将数据保存在服务器端,并将发送和接收 Cookie 的操作包装起来。在 Cookie 中包含的是 Session ID,而不是数据本身。
启用 Sessions¶
Session 是通过 中间件 的方式实现的。
要启用 Session 的功能,需要完成以下步骤:
修改 MIDDLEWARE_CLASSES 设置,并确定其中包含了 'django.contrib.sessions.middleware.SessionMiddleware' 。``django-admin.py startproject`` 所创建的缺省的 settings.py 就已经激活了 SessionMiddleware 。
将 'django.contrib.sessions' 添加到你的 INSTALLED_APPS 设置中,并执行 manage.py syncdb 以便安装用于存储 Session 数据的表格。
Changed in Django 1.0: 如果你并未使用数据库存储 Session,则此步骤可以忽略;参考 配置 Session 引擎 。
If you don’t want to use sessions, you might as well remove the SessionMiddleware line from MIDDLEWARE_CLASSES and 'django.contrib.sessions' from your INSTALLED_APPS. It’ll save you a small bit of overhead.
配置 Session 引擎¶
New in Django 1.0..
缺省情况下,Django 将 Session 存储在数据库中 (使用模型 django.contrib.sessions.models.Session)。尽管这很方便,但在某些情况下,把 Session 放在其它的地方速度会更快。因此 Django 允许您通过配置让它将 Session 数据保存在文件系统或缓冲区中。
使用基于文件的 Session¶
要使用基于文件的 Session,请将 SESSION_ENGINE 设置为 "django.contrib.sessions.backends.file" 。
您可能还需要修改 SESSION_FILE_PATH 这一设置以便控制 Django 存储 Session 文件的位置,缺省情况下,它使用 tempfile.gettempdir() ,通常是 /tmp 。
使用基于缓冲区的 Session¶
要使用 Django 的缓冲区系统来保存 Session,需要将 SESSION_ENGINE 设置为 "django.contrib.sessions.backends.cache" 。您必须确保您已经配置了缓冲区,详情请参考 缓冲区文档 。
Note
只有在使用 Memcached 作为缓冲后台时,才能使用基于缓冲区的 Session。因为以本地内存作为缓冲后台时,它存储缓冲数据的时间太短了,这样直接访问文件或数据库的速度,要比通过缓冲区访问文件或数据库的速度更快一些。
在视图中使用 Session¶
在开启 SessionMiddleware 后,每一个 HttpRequest 对象 (Django 视图函数的第一个参数) 救火有一个 session 属性,它是一个类字典对象。您可以直接对其读写。
Session 对象有以下标准字典函数:
__getitem__(key)
例子: fav_color = request.session['fav_color']
__setitem__(key, value)
例子: request.session['fav_color'] = 'blue'
__delitem__(key)
例子: del request.session['fav_color']. This raises KeyError if the given key isn’t already in the session.
__contains__(key)
例子: 'fav_color' in request.session
get(key, default=None)
例子: fav_color = request.session.get('fav_color', 'red')
keys()
items()
setdefault()
clear()
New in Django 1.0: setdefault() 和 clear() 是在这个版本新加的。
它还有如下方法:
flush()
New in Django 1.0.
从数据库中删除当前的 Session 数据并且重新生成一个 Session 键,并将其发送给浏览器。这用于需要确保 Session 数据无法再从用户浏览器访问时,譬如调用 django.contrib.auth.logout() 时。
set_test_cookie()
设定检测 Cookie 以检验用户的浏览器是否支持 Cookie。因 Cookie 的工作方式,在下一次用户请求之前,您都无法得到测试结果。详情参考下面的 设置检测 Cookie 。
test_cookie_worked()
判断用户的浏览器是否收到了检测 Cookie,并返回 True 或 False 。因 Cookie 的工作方式,您必须在之前的独立请求中调用 set_test_cookie() 。详情参考下面的 设置检测 Cookie 。
delete_test_cookie()
删除检测 Cookie,请自己调用此函数以便清除该 Cookie。
set_expiry(value)
New in Django 1.0.
设定 Session 的过期时间。您可以提供下述几种形式的值:
如果 value 是整形,则它表示的是秒。例如,调用 request.session.set_expiry(300) 会让 Session 在五分钟后过期。
如果 value 是 datetime 或 timedelta 对象,则 Session 将会在相应的日期或时间点过期。
如果 value is 0 ,则用户的 Session 会在浏览器关闭时过期。
如果 value is None ,则 Session 会使用全局策略来设定过期时间。
get_expiry_age()
New in Django 1.0.
获得此 Session 的过期时间。对于没有自定义过期时间的 Session (或在浏览器关闭时过期的 Session),此函数返回值与 settings.SESSION_COOKIE_AGE 相同。
get_expiry_date()
New in Django 1.0.
获得此 Session 的过期时间点。对于没有自定义过期时间的 Session (或在浏览器关闭时过期的 Session),此函数的返回值等于从现在到时间点 settings.SESSION_COOKIE_AGE 的秒数。
get_expire_at_browser_close()
New in Django 1.0.
返回 Session 是否会在浏览器关闭时过期,返回值为 True 或 False 。
您在视图中的任何位置都可以修改 request.session ,改多少次都行。
Session 对象指南¶
直接在 request.session 上使用 Python 字符串作为字典的键,这比使用 Session 对象的方法来得更直接。
在 Session 字典中,以下划线开始的键,是保留给 Django 在内部使用的。
不要用一个新的对象覆盖 request.session ,也不要访问或修改它的属性,它只能作为一个类字典对象使用。
例子¶
这个简单的视图在用户提交了评价信息后,将变量 has_commented 设定为 True ,这样就可以防止用户多次提交评价信息:
def post_comment(request, new_comment): if request.session.get('has_commented', False): return HttpResponse("You've already commented.") c = comments.Comment(comment=new_comment) c.save() request.session['has_commented'] = True return HttpResponse('Thanks for your comment!')
这个简单的视图让网站的“用户”登录:
def login(request): m = Member.objects.get(username=request.POST['username']) if m.password == request.POST['password']: request.session['member_id'] = m.id return HttpResponse("You're logged in.") else: return HttpResponse("Your username and password didn't match.")
...与上面的例子相对应的,下面的例子则让用户退出:
def logout(request): try: del request.session['member_id'] except KeyError: pass return HttpResponse("You're logged out.")
实际上标准的 django.contrib.auth.logout() 还会多做一些事情从而防止因疏忽造成的数据泄露。它会调用 request.session.flush() 函数。我们使用这些例子只是演示如何操作 Session 对象,它可不是一个完整的 logout() 实现。
设置检测 Cookie¶
为方便起见,Django 提供了一种简单的方法来检测用户的浏览器是否支持 Cookie。只要在一个请求中调用 request.session.set_test_cookie() 并在后续请求中调用 request.session.test_cookie_worked() 即可。注意千万不要在同一次请求中同时调用。
之所以要在两次请求中调用 set_test_cookie() 和 test_cookie_worked() 是因为 Cookie 的工作模式。当您设定了 Cookie 后,再下一次请求前,都是没有办法知道浏览器是否会接收它的。
另外最好在测试完毕后,使用 delete_test_cookie() 清除测试用数据。
以下是一个典型的例子:
def login(request): if request.method == 'POST': if request.session.test_cookie_worked(): request.session.delete_test_cookie() return HttpResponse("You're logged in.") else: return HttpResponse("Please enable cookies and try again.") request.session.set_test_cookie() return render_to_response('foo/login_form.html')
在视图外使用 Session¶
New in Django 1.0.
有一个 API 专门用于在视图之外操作 Session 数据:
>>> from django.contrib.sessions.backends.db import SessionStore >>> s = SessionStore(session_key='') >>> s['last_login'] = datetime.datetime(2005, 8, 20, 13, 35, 10) >>> s['last_login'] datetime.datetime(2005, 8, 20, 13, 35, 0) >>> s.save()
如果您使用了 django.contrib.sessions.backends.db 后台,则每一个 Session 都是一个普通的 Django 模型。模型 Session 在文件 django/contrib/sessions/models.py 中定义。由于它是一个普通的模型,因此您可以使用 Django 的数据库编程接口直接访问它:
>>> from django.contrib.sessions.models import Session >>> s = Session.objects.get(pk='') >>> s.expire_date datetime.datetime(2005, 8, 20, 13, 35, 12)
注意,要获得 Session 字典,需要调用 get_decoded() ,这是因为字典是以编码的方式存储的:
>>> s.session_data '...' >>> s.get_decoded() {'user_id': 42}
Session 是何时存储的¶
缺省情况下,Django 只在 Session 被修改时才会保存它,即只有字典中的值被修改或删除时:
# Session is modified. request.session['foo'] = 'bar' # Session is modified. del request.session['foo'] # Session is modified. request.session['foo'] = {} # Gotcha: Session is NOT modified, because this alters # request.session['foo'] instead of request.session. request.session['foo']['bar'] = 'baz'
对于在上面的最后一个,通过显示地设定 Session 对象的 modified 属性,可以通知 Session 对象它被修改了:
request.session.modified = True
要改变这种行为,可以将 SESSION_SAVE_EVERY_REQUEST 设定为 True 。如果 SESSION_SAVE_EVERY_REQUEST 是 True ,则 Django 在每一次独立的请求之后都会保存 Session。
注意,只有在创建或修改 Session 的时候才会送出 Session Cookie,如果 SESSION_SAVE_EVERY_REQUEST 为 True ,则每次请求都会送出 Cookie。
同样地,在送出 Cookie 时,它的 expires 部分每次都会被更新。
与浏览器同步的 Session 和持久的 Session¶
通过设置 SESSION_EXPIRE_AT_BROWSER_CLOSE ,您可以控制 Session 框架使用与浏览器同步的 Session 或持久的 Session。
缺省情况下, SESSION_EXPIRE_AT_BROWSER_CLOSE 的值为 False ,这表示 Session Cookie 将会保存在用户的浏览器中,直到超过了 SESSION_COOKIE_AGE 。如果您希望用户不必在每次关闭浏览器后都重新登陆,请使用这种方式。
如果 SESSION_EXPIRE_AT_BROWSER_CLOSE 设定为 True ,则 Django 会使用与浏览器同步的 Cookie,即用户关闭浏览器时 Cookie 就会过期。如果您希望用户每次打开浏览器都必须登录,请使用这种模式。
New in Django 1.0.
这个设置具有全局的缺省值,但可以通过调用 request.session.set_expiry() 为每个 Session 设定独立的值,相关内容在上述的 在视图中使用 Session 中有所阐述。
清空 Session 表格¶
注意,Session 数据有可能堆积在数据库表格 django_session 中,Django 不提供 自动清除它们的功能。它把定期清空 Session 数据的任务留给了您。
要理解这个问题,想像一下用户使用 Session 时会发生什么。当用户登录,Django 向表格 django_session 中添加一条记录。每当 Session 数据变化时,Django 会更新这条记录。如果用户手工退出了,Django 会删除它。但是,如果用户 没有 退出,则这条记录永远都不会被删除。
Django 提供了一个能够完成清除功能的样例脚本 django-admin.py cleanup ,它从 Session 表格中删除那些 expire_date 已经过期的记录,但是您的应用程序可能会有其它的需求。
设置¶
一些 Django 设置 可以帮助您控制 Session 的行为:
SESSION_ENGINE¶
New in Django 1.0.
缺省值: django.contrib.sessions.backends.db
控制 Django 在何处保存 Session 数据,合法的值为:
'django.contrib.sessions.backends.db'
'django.contrib.sessions.backends.file'
'django.contrib.sessions.backends.cache'
详情请参考 配置 Session 引擎 。
SESSION_FILE_PATH¶
New in Django 1.0.
缺省值: /tmp/
如果您使用基于文件的 Session 存储,则此变量控制着 Django 存储 Session 数据的目录。
SESSION_COOKIE_AGE¶
缺省值: 1209600 (两周,以秒表示)
Session Cookie 的过期时间,以秒表示
SESSION_COOKIE_DOMAIN¶
缺省值: None
Session Cookie 的域。如果是要设定跨域的 Cookie,可以将其设定为 ".lawrence.com" 的形式,否则请使用 None 。
SESSION_COOKIE_NAME¶
缺省值: 'sessionid'
Session 所使用的 Cookie 的名称,可根据需要设定。
SESSION_COOKIE_SECURE¶
缺省值: False
对于 Session Cookie,是否要使用安全模式。如果将此设定为 True ,则 Cookie 将会被标记为“安全”,这种情况下,浏览器就需要确定该 Cookie 是否是通过 HTTPS 连接发送的。
SESSION_EXPIRE_AT_BROWSER_CLOSE¶
缺省值: False
是否当用户关闭浏览器时就让 Session 过期。详情参考上文 与浏览器同步的 Session 和持久的Session 。
SESSION_SAVE_EVERY_REQUEST¶
缺省值: False
是否在每次请求时都保存 Session 数据。如果此项为 False (缺省值),则 Session 数据只有在它被修改后才会保存,即它的字典值被赋值或删除时。
技术细节¶
Session 字典可以接受任何与 pickle 兼容的 Python 对象,详情参考 pickle 模块 。
Session 数据存储在数据库表格 django_session 中。
Django 只在需要的时候才发送 Cookie,如果您没有设定任何的 Session 数据,它不会送出 Cookie。
URL 中的 Session ID¶
Django 的 Session 框架是完全基于 Cookie 的,并且它也只能基于 Cookie。它不会像一些软件(譬如 PHP)那样在 Session 不能正常工作时,把 Session ID 放到 URL 中。作出这一决定是经过深思熟虑的,那种方法不仅使得 URL 很丑陋,并且 Session ID 还有可能通过 “Referer” 头泄漏出去,从而给网站带来安全隐患。
9. 用Django和前端做的网站,首页登陆存了session和cookies,其他页面不怎么改变登录状态,求各位大神代码示范
进入页面前,
判断session和cookies是否存在用户信息,
有渲染页面,没有提示跳转去登录