Django的session机制

  1. Session

    如果不涉及用户登录等敏感信息时,Cookie 能够满足大部分的场景需求。而客户端(如浏览器)会将 Cookie 是保存在硬盘中。如果用户登录敏感信息保存到 cookie 中,会存在安全性问题。因为当 HTTP 请求被黑客拦截,然后劫持 cookie 信息。黑客就可以凭借该 cookie 登录对应的网站。

    Session 的出现很好地解决的这个问题。Session 机制是一个服务器端的机制。它会将信息保存服务器端,跟客户端通信只需要一个随机的字符串 session_id。如果客户端没有禁止 Cookie 功能,session_id 通常是保存在 Cookie中 的。

  2. Django中session的简单实现
    django 的session存储可以利用中间件middleware来实现。B/S架构中,mvc模式下服务器中间件的执行过程是。

INSTALLED_APPS = [
    # 启用 sessions 应用
    'django.contrib.sessions',
]

MIDDLEWARE = [
    # 启用 Session 中间层
    'django.contrib.sessions.middleware.SessionMiddleware',
]
  1. Django中session的存储
    数据库/缓存/混合存储
SESSION_ENGINE='django.contrib.sessions.backends.db'   # 存储到数据库
SESSION_ENGINE='django.contrib.sessions.backends.cache'  # 本地缓存
SESSION_ENGINE='django.contrib.sessions.backends.cached_db'  # 混合存储,优先从缓存读取数据,没有读取数据库数据

使用Redis做session存储,settings.py添加配置(需要安装django-redis模块)

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"

4.中间件
创建中间件,用于签发token/id等用于session解析及认证。

def my_middleware(get_response):
    
    def middleware(request):
        # session 解析相关方法
        response = get_response(request)
        return response
    return middleware
def my_middleware2(get_response):
    
    def middleware(request):
    	# session 签发token相关方法
        response = get_response(request)
        return response
    return middleware
MIDDLEWARE = [
    'users.middleware.my_middleware1',  # 添加
    'users.middleware.my_middleware1',  # 添加
]
  1. Session操作
request.session['键']=# 写session
request.session.get('键',默认值)  # 根据键读值
request.session.clear()  # 清除所有session,在存储中删除值部分
request.session.flush()  # 清除session数据,在存储中删除session的整条数据
del request.session['键'] # 删除session中的指定键及值
request.session.set_expiry(value)  # 设置session有效期
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值