django中cookie与session的使用
一、cookie
- cookie由服务器生成 ,存储在浏览器中的键值对数据,具有不安全性,对应敏感数据应该加密储存在服务端
- 每个域名的cookie相互独立
- 浏览器访问域名为A的url地址,会把A域名下的cookie一起传递到服务器
- cookie可以设置过期时间
django中设置cookie:
from django.http import HttpResponse
# 接收路由2个参数,一个key, 一个value
def SetCookie(request, key, value):
response = HttpResponse()
response.set_cookie(key, value, max_age=60 * 60)
return response
注:
max_age:
默认为None(关闭浏览器时删除Cookie)
单位秒:60*60 表示3600秒,即1小时
django中获取cookie:
from django.http import HttpResponse
# 接收路由的key进行查询返回数据
def GetCookie(request,key):
value = request.COOKIES.get(key)
return HttpResponse(value)
路由配置:
from .CookieApiView import SetCookie, GetCookie
urlpatterns = [
re_path('set_cookie/(.+)/(.+)', SetCookie, name="set_cookie"),
re_path('get_cookie/(.+)', GetCookie, name="get_cookie"),
]
cookie测试:
设置: http://127.0.0.1:8000/set_cookie/username/name1
获取: http://127.0.0.1:8000/get_cookie/username
二、Session
- Ssession基于cookie
- Session把敏感的数据以加密的方式保存在服务器的数据库中
- Session也可设置过期时间
session设置:
request.session[key]=value
# 设置过期时间,默认过期时间是2周
request.seesion.set_expiry(60*60)
session获取:
value=request.seesion.get(key)
注: 如果没有这个key,返回空
清空session表中所有数据:
request.seesion.flush()
用途:
这个函数用于刷新会话,即清空会话中的数据,但保留会话ID。这通常用于确保会话数据不会累积,也不会被滥用。
注意事项:
这个方法会删除当前会话中的所有数据,但不会删除会话的cookie。这意味着会话ID会保留,但session会话数据会被清空。
清理sessionId对应数据:
request.seesion.clear()
用途:
- 这个函数用于完全清除当前会话中的所有数据。通常在用户注销或需要重置会话时使用。
注意事项:
- 使用 clear()方法会删除会话中的所有数据,包括用户ID、登录状态等。因此,在调用这个方法之前,请确保这是你想要的操作。
django中session配置
django中session数据存放在初始化下面这个应用时生成的数据表django_session中:
INSTALLED_APPS = [
'django.contrib.sessions',
]
三个字段示例: seesion_key、seesion_data、expirer_date
全局模块配置
INSTALLED_APPS = [
'django.contrib.sessions',
]
视图配置
from django.http import HttpResponse
def SetSession(request, key, value):
request.session[key] = value
return HttpResponse("session设置成功")
def GetSession(request,key):
value = request.session.get(key)
return HttpResponse(value)
# 清空sessionID数据
def ClaerSession(request):
request.session.clear()
return HttpResponse("session清理成功")
# 清空session表中所有数据
def FlushSession(request):
request.session.flush()
return HttpResponse("session表中数据清理成功")
3.路由配置
from .SessionApiView import SetSession, GetSession, ClaerSession, FlushSession
urlpatterns = [
re_path('set_session/(.+)/(.+)', SetSession, name="set_session"),
re_path('get_session/(.+)', GetSession, name="get_session"),
re_path('flush_session/', FlushSession, name="flush_session"),
re_path('clear_session/', ClaerSession, name="clear_session"),
]
测试
设置: http://127.0.0.1:8000/set_session/username/name1
获取: http://127.0.0.1:8000/get_session/username
清理sessionId对应数据: http://127.0.0.1:8000/clear_session/
清空session表中所有数据: http://127.0.0.1:8000/flush_session/