geekdoc-python-zh/docs/askpython/django-sessions.md

5.0 KiB
Raw Permalink Blame History

Django 会话–使用 Django 设置用户会话

原文:https://www.askpython.com/django/django-sessions

在本文中,我们将讨论 Django 会话。会话的行为和为我们提供的结果与使用 cookies 时相似。但是在客户端保存 cookies 会导致安全威胁。因此,为了使这个过程更加安全,我们使用会话。这正是我们将在本文中学到的——如何使用 Django 会话保护我们的网站免受不安全 cookies 的攻击!!

什么是 Django 会话?

从 Django cookies 文章中我们知道,我们可以使用保存在客户端的 cookies 来存储 Web 应用程序的各种有用数据。

但是在客户端存储与 Web App 相关的信息会导致很多安全问题,因此在客户端存储并不是一个好主意。一些可能的威胁包括:

  1. 黑客可以修改 cookie 数据,并发送它们来潜在地危害我们的网站。
  2. 我们不能存储用户密码等敏感数据。在饼干里。
  3. 我们只能在 cookies 中存储有限的数据。大多数浏览器不允许超过 4kb 的数据。

为了解决所有这些问题,我们使用会话,这是一种在服务器端存储 cookies 的机制。因此,所有数据都以 DB 表的形式存储在服务器中,客户端 cookie 只有用于标识的会话 ID。

因此,通过会话,我们可以保存敏感数据,通过会话,我们还可以处理客户端浏览器的无 cookie 策略

Django 在其框架中预建了一个会话框架。现在让我们了解一下吧。

如何设置 Django 会话

会话属性作为字典出现在请求数据中。因此,我们用来调用会话的语法是:

request.session.(#other_commands)

1)设置会话

建立会话意味着我们:

  1. 创建会话
  2. 然后将会话 ID 作为 cookie 发送给客户端。

设置会话的语法是:

request.session['session_name'] = 'session_value'

2)访问会话

为了取回会话信息,我们调用 get session 属性。然后执行以下任务:

  1. 从客户端接收 cookie
  2. 读取会话 ID 的 cookie
  3. 使用会话 ID 检索会话数据

获取会话的语法是:

#method1
session_value = request.session.get('session_name') 

#method2
session_value = request.session['session_name']

3)其他会话属性

除此之外,还有一些其他的会话功能。其中一些列举如下:

  • set_expiry(value) :设置会话的到期时间。
  • clear)_expired(): 删除过期的会话
  • get_expiry_age(): 返回会话到期前剩余的秒数
  • get_expiry_date(): 返回会话的到期日期

读够了吧!!现在让我们把手弄脏吧。

Django 课程实践

我们现在将构建一个简单的 web 应用程序,它使用一个视图设置会话,然后使用另一个视图返回会话。

1)对 SetSession 视图进行编码

视图中添加下面的 SetSession 视图. py

def SetSession(request):
    request.session['book_name'] = 'Sherlock Holmes'
    return HttpResponse('The Session has been successfully set')

视图的 URL 路径将是:

path('setsession/',SetSession),

2)编码 GetSession 视图

现在在 SetSession 下面,在 views.py 中添加下面的 GetSession 视图

def GetSession(request):
    book_name = request.session.get('book_name')
    return HttpResponse(f'The Book Name is: {book_name}')

视图的 URL 路径将是:

path('getsession/',GetSession),

代码的实现

既然我们已经讨论了所需的单个视图,下面是 Views.py 的组合脚本(包括上面的代码)

只需在您的 views.py 中添加以下代码以及 URL 映射,我们就可以开始了:

from django.shortcuts import HttpResponse

def SetSession(request):
    request.session['book_name'] = 'Sherlock Holmes'
    return HttpResponse('The Session has been successfully set')

def GetSession(request):
    book_name = request.session.get('book_name')
    return HttpResponse(f'The Book Name is: {book_name}')

最终的 urls.py 文件将如下所示:

from django.contrib import admin
from django.urls import path
from .views import SetSession, GetSession

urlpatterns = [
    path('setsession/',SetSession),
    path('getsession/',GetSession),
]

好了,现在让我们启动服务器并转到127 . 0 . 0 . 1:8000/setsession/

Set Session

Set Session

我们已经成功设置了会话。

现在让我们通过**127 . 0 . 0 . 1:8000/getsession/**端点取回它。

Get Session

Get Session

就是这样!!看看使用进程是多么简单。

结论

就这样,伙计们!!这都是关于 Django 会话以及如何在你的项目中使用它们。有关 Cookie 处理的信息,请查看 Django Cookies 文章。

下一篇文章再见!!在那之前,继续编码吧!!