Django-cookie和session

文章目录


前言

Cookie 是由服务器发送到用户浏览器的小文件,用于存储用户的相关信息。每次用户访问网站时,浏览器会将这些 cookie 发送回服务器

bash 复制代码
特点:
1. 数据存储在客户端,大小通常限制在 4KB
2. 过期时间可以设置,默认是会话级别
3. 用户可以手动删除 cookie

Session

Session 是一种在服务器端存储用户数据的机制,用户的数据以会话的方式保存。Django 会为每个用户生成一个唯一的 session ID,并将其存储在客户端的 cookie 中

bash 复制代码
特点:
1. 数据存储在服务器端,可以存储更大和复杂的数据结构
2. 更安全,因为用户不能直接访问 session 数据
3. 自动管理会话的过期时间

假设你想在用户的浏览器中存储一个用户的用户名,以便在下次访问时显示欢迎信息

方法:

bash 复制代码
def set_cookie(request):
    response = render(request, 'set_cookie.html')
    response.set_cookie('username', 'john', max_age=3600)# 设置一个名为username,值为john的cookie,有效期为3600秒
    return response

def get_cookie(request):
    username = request.COOKIES.get('username', 'guest')
    return HttpResponse(f"欢迎回来,{username}!")

路由:

bash 复制代码
path('set_cookie', views.set_cookie, name='set_cookie'),
path('get_cookie', views.get_cookie, name='get_cookie'),

html:

bash 复制代码
<Doctype html>
<html>
<head>
	<title>Set Cookie</title>
</head>
<body>
	<h1>Set Cookie</h1>
	<p>Cookie set successfully!</p
</body>
</html>

访问链接http://127.0.0.1:8000/article/set_cookie设置cookie

在访问http://127.0.0.1:8000/article/get_cookie获取cookie

二、Django 中 Session

假设你想在用户登录后存储他们的登录状态

方法:

bash 复制代码
def login_view(request):
    if request.method == 'POST':
        request.session['is_login'] = True
        return redirect('/article/index_view')
    else:
        return render(request, 'login_view.html')

def index_view(request):
    if 'is_login' in request.session:
        return render(request, 'index_view.html')
    else:
        return redirect('/article/login_view')

def logout_view(request):
    request.session.clear()
    return redirect('/article/login_view')

路由:

bash 复制代码
path('login_view', views.login_view, name='login_view'),
path('logout_view', views.logout_view, name='logout_view'),
path('index_view', views.index_view, name='index_view'),

login_view.html:

bash 复制代码
<DOCTYPE html>
<html>
<head>
	<title>Login</title>
</head>
<body>
	<h1>Login</h1>
	<form method="post" action="">
		{% csrf_token %}
		<label for="username">Username:</label>
		<input type="text" id="username" name="username" required><br><br>
		<label for="password">Password:</label>
		<input type="password" id="password" name="password" required><br><br>
		<input type="submit" value="Login">
	</form>
</body>
</html>

index_view.html:

bash 复制代码
<DOCTYPE html>
<html>
<head>
	<title>Welcome to our website</title>
</head>
<body>
	<h1>Welcome to our website</h1>
	<p>Thank you for visiting our website. We hope you find what you are looking for.</p>
    <span><a href="/article/logout_view">logout</a></span>
</body>
</html>

访问链接http://127.0.0.1:8000/article/login_view

因为这里只是介绍session,所以没有做验证用户处理

点击logout之后

三.区别

Cookie: 适合存储小量且不敏感的信息,直接由用户浏览器管理

Session: 适合存储较大的数据和敏感信息,数据保存在服务器端,更安全

注意: django.session 表中保存的是浏览器的信息,而不是每一个用户的信息

因此,同一浏览器多个用户请求只保存一条记录(后面覆盖前面),多个浏览器请求才保存多条记录

相关推荐
梦想平凡11 分钟前
百游棋牌源代码开发搭建教程(五):房间创建、座位分配与请求幂等实现
前端·javascript·数据库·源代码管理
凤山老林21 分钟前
Spring Boot 整合 Flowable 的企业级落地指南
数据库·spring boot·后端·flowable·工作流
企业数字化笔记24 分钟前
AI写的系统出现504怎么办?接口超时和数据库慢查询排查
数据库·后端
2601_962218611 小时前
万象生鲜系统订单全生命周期状态同步技术实现业务可视
大数据·数据库·人工智能·python·算法
Wang's Blog1 小时前
Java框架快速入门:Spring Security+OAuth2之用户注册与唯一性校验实现
java·数据库·spring
跨境生态圈2 小时前
2026谷歌SEO快速排名深度解析:合规起量、避坑指南与实战落地策略
数据库·人工智能·爬虫·搜索引擎·chatgpt
JavaPub-rodert2 小时前
Docker 安装 MySQL 完整教程:从零部署数据库,到生产环境持久化配置
数据库·mysql·docker
隔窗听雨眠2 小时前
MySQL整库迁移至KaiwuDB完全指南:从数据类型映射到生产切换的系统性实践
数据库·mysql
xhbh6663 小时前
中小企业 Redis 运维,如何安全归档 RDB、AOF 备份文件?
运维·数据库·缓存·数据备份·文件备份·同步备份·号码备份
勤奋的树懒3 小时前
从手写 SQL 到 Windows 工具:致远 OA 文件清理实践
数据库·sql·windows server·致远oa