django session会话 -九游会下载

如前所述,我们可以在web应用程序客户端使用cookie来存储大量的有用数据。 我们在此之前已经看到了可以使用客户端的cookie存储各种数据,在web应用程序这是非常有用的。这就导致了很多要保存数据的重要性和一些安全漏洞问题。

出于安全原因,django有一个会话框架来处理cookies。 会话用于抽象的接收和发送cookie,数据保存在服务器端(如数据库),而客户端的cookie只是有识别会话id。会话也有助于避免在用户浏览器设置为“不接受”cookies行为。

设置会话

在django中,使会话在项目 settings.py 完成,通过添加一些行到middleware_classes和installed_apps选项。这应该在创建项目完成,但它总是很容易知道,所以middleware_classes应该类似如下 −

# filename : example.py
# 九游会下载 copyright : 2020 by nhooo
# author by : https://www.elefans.com/biancheng/
# date : 2020-08-08
'django.contrib.sessions.middleware.sessionmiddleware'

installed_apps应该有 -

# filename : example.py
# 九游会下载 copyright : 2020 by nhooo
# author by : https://www.elefans.com/biancheng/
# date : 2020-08-08
'django.contrib.sessions'

默认情况下,django在数据库保存会话信息(表django_session中或集合),但可以用其他的方式类似配置的引擎存储的信息:在文件中或在缓存中。

当会话启用,每个请求(在django任何针对第一个参数)有一个会话(字典)属性。

让我们创建一个简单的示例,看看如何创建和保存会话。我们之前已经建立了一个简单的登录系统(见django的表单处理的章节和django的cookies处理一章)。让我们保存用户名在cookie。因此如果不注销,访问我们的登录页面时,你不会看到登录表单。 在django通过保存cookie在服务器端,使用cookies处理更加安全。

对于这一点,首先让我们改变登录代码以保存username 在服务器端-

# filename : example.py
# 九游会下载 copyright : 2020 by nhooo
# author by : https://www.elefans.com/biancheng/
# date : 2020-08-08
def login(request):
    username = 'not logged in'
    if request.method == 'post':
       myloginform = loginform(request.post)
       if myloginform.is_valid():
          username = myloginform.cleaned_data['username']
          request.session['username'] = username
       else:
          myloginform = loginform()
 
    return render(request, 'loggedin.html', {"username" : username}

那么让我们来创建视图对应登录表单的视图,如果cookie设置将不会显示表单 -

# filename : example.py
# 九游会下载 copyright : 2020 by nhooo
# author by : https://www.elefans.com/biancheng/
# date : 2020-08-08
def formview(request):
    if request.session.has_key('username'):
       username = request.session['username']
       return render(request, 'loggedin.html', {"username" : username})
    else:
       return render(request, 'login.html', {})

现在,让我们修改url.py文件并更改url,因此配对新视图 −

# filename : example.py
# 九游会下载 copyright : 2020 by nhooo
# author by : https://www.elefans.com/biancheng/
# date : 2020-08-08
from django.conf.urls import patterns, url
 from django.views.generic import templateview
 urlpatterns = patterns('myapp.views',
    ,
    )

当访问 /myapp/connection,将能看到如下页面−

浏览器运行结果

你会被重定向到下面的页面 -

浏览器运行结果

现在,如果您尝试再次访问/myapp/connection,它会直接重定向到第二个屏幕。

让我们创建一个简单的注销视图,用于清除cookie。

# filename : example.py
# 九游会下载 copyright : 2020 by nhooo
# author by : https://www.elefans.com/biancheng/
# date : 2020-08-08
def logout(request):
    try:
       del request.session['username']
    except:
       pass
    return httpresponse("you are logged out.")

并在 myapp/url.py 中配对 url 注销

# filename : example.py
# 九游会下载 copyright : 2020 by nhooo
# author by : https://www.elefans.com/biancheng/
# date : 2020-08-08
,

现在,如果访问/myapp/logout,将得到如下页面-

浏览器运行结果

如果再次访问 /myapp/connection ,将会得到的登录表单(屏幕1)。

可能使用会话的一些动作

我们已经看到如何存储和访问会话,下面是一个很好的了解请求的会话属性还有其他一些有用的操作,如:

  • set_expiry ( value ) − 设置会话的过期时间

  • get_expiry_age() − 返回直到会话过期的秒数

  • get_expiry_date() − 返回本会话将到期的日期

  • clear_expired() − 从会话中删除过期的会话存储

  • get_expire_at_browser_close()   − 返回true或false,具体取决于用户的会话cookie是否已过期在用户的web浏览器关闭时

网站地图