目录

  1. Django Cookie 和 Session 简介
  2. Django Cookie
  3. Django Session
  4. Cookie 和 Session 的比较
  5. 参考资料

1. Django Cookie 和 Session 简介

在 Web 开发中,Cookie 和 Session 是两种用于保存客户端状态的常用方式。在 Django 中,Cookie 和 Session 都是用于存储用户的信息和数据,确保用户在多次请求中能够保持状态。

  • Cookie:Cookie 是由服务器发送并存储在客户端浏览器中的小数据块。通常用于存储轻量级数据,如用户的登录信息或偏好设置。
  • Session:Session 是服务器端用于存储用户状态的方式,每个用户会被分配一个唯一的 session ID,服务器根据 session ID 存储相关的用户数据。Session 数据存储在服务器中,而客户端仅存储一个指向该 session 的标识符(通常是通过 Cookie 实现)。

2. Django Cookie

2.1 设置 Cookie

Django 提供了简单的方法来设置 Cookie。可以使用 HttpResponse 对象的 set_cookie() 方法来设置一个 Cookie。

from django.http import HttpResponse

def set_cookie_view(request):
    response = HttpResponse("Setting cookie")
    response.set_cookie('user_name', 'John Doe', max_age=3600)  # 设置 'user_name' 的 Cookie,有效期为1小时
    return response

  • user_name:Cookie 的键。
  • John Doe:Cookie 的值。
  • max_age=3600:设置 Cookie 的过期时间,单位为秒。

2.2 读取 Cookie

Django 可以通过 request.COOKIES 获取 Cookie。COOKIES 是一个字典对象,包含了所有的 Cookie。

def get_cookie_view(request):
    user_name = request.COOKIES.get('user_name', 'Guest')  # 如果没有找到 'user_name',则默认值为 'Guest'
    return HttpResponse(f"Hello, {user_name}")

  • request.COOKIES:一个字典,包含了所有的 Cookie。
  • .get() 方法:用于获取指定键的值,如果该键不存在,则返回默认值。

2.3 删除 Cookie

要删除 Cookie,可以通过设置其过期时间为过去的时间,告诉浏览器删除该 Cookie。

def delete_cookie_view(request):
    response = HttpResponse("Cookie Deleted")
    response.delete_cookie('user_name')  # 删除 'user_name' 的 Cookie
    return response

  • delete_cookie():删除指定的 Cookie。

3. Django Session

3.1 设置 Session

Django 默认使用数据库存储 Session 数据。当设置 Session 时,可以通过 request.session 来设置值。

def set_session_view(request):
    request.session['user_name'] = 'John Doe'  # 将 'user_name' 存储在 Session 中
    return HttpResponse("Session Set")

  • request.session:这是一个类似字典的对象,允许你存储和访问与当前会话相关的数据。

3.2 读取 Session

要读取存储在 Session 中的数据,可以通过 request.session 来访问。

def get_session_view(request):
    user_name = request.session.get('user_name', 'Guest')  # 获取 'user_name' 的值,如果没有设置,返回默认值 'Guest'
    return HttpResponse(f"Hello, {user_name}")

  • request.session.get():用于获取 Session 中的数据,如果没有找到,返回指定的默认值。

3.3 删除 Session

删除 Session 中的某个值可以使用 del 关键字,删除整个 Session 则使用 request.session.flush()

def delete_session_view(request):
    try:
        del request.session['user_name']  # 删除 'user_name' 对应的 Session
    except KeyError:
        pass
    return HttpResponse("Session Deleted")

def flush_session_view(request):
    request.session.flush()  # 删除当前用户的所有 Session 数据
    return HttpResponse("All Sessions Cleared")

  • del request.session['key']:删除指定的 Session 数据。
  • request.session.flush():删除当前会话的所有 Session 数据。

4. Cookie 和 Session 的比较

特性CookieSession
存储位置存储在客户端(浏览器)存储在服务器端
存储容量通常限制为 4KB没有明确限制,通常较大
安全性不加密,容易被篡改更安全,数据存储在服务器端
存活时间可通过 max_ageexpires 设置过期时间默认会话结束时过期(通常是用户退出或会话过期)
使用场景适合存储轻量级数据(如用户名、偏好设置)适合存储复杂数据(如购物车、登录状态)
  • Cookie 适用于存储一些非敏感的数据,如用户偏好设置,方便跨请求访问。
  • Session 适用于存储更复杂的数据,如登录信息、购物车等,数据存储在服务器端,相对更安全。

5. 参考资料

出站链接

站内链接