Django大回顾 - 7 Cookie、Session

【1】Cookie

定义:

存在浏览器上的键值对,就是cookie

cookie哪里来的?---》服务端返回的--》放在响应头的cookie中---》浏览器会自动取出来--》放到cookie中

-只要浏览器中有cookie,再次向当前域发送请求,都会自动携带

-携带在 请求头中得 cookie字段中

python 复制代码
cookie:"name=lqz;age=19"

不安全问题:

cookie中发了敏感数据---》客户能看到

【1.2】Cookie的相关操作

python 复制代码
# 先写一个django的四件套(HttpResponse、render、redirect、JsonResponse)


obj = HttpResponse('ok')

# 设置cookie
obj.set_cookie('k','v')


# 获取cookie值

request.COOKIE.get('k')


# 删除cookie

request.delete_cookie('k')


# 清空cookie

request.COOKIE.clear()

【2】Session

解决cookie不安全的问题:

我们需要让cookie变的安全---》敏感数据不在cookie中方法,而放在session中

-session是服务端的键值对

python 复制代码
'''    
session跟cookie有什么关系呢?
        {111:{name:lqz,age:19,password:123},222:{name:zs,age:19,password:666}}
    -把key,以cookie的形式,存到浏览器中
        sessionid:111
    -当前浏览器以后再发请。就会携带 过来
    -我们根据带过来的cookie 111----》 从 session中取出对应的数据

'''

【2.1】Session的使用

Session使用----------》必须先迁移表------》查看django-session表存不存在

-session存在服务端的---》默认情况下存在---》django-session表中

-配置文件

-django项目有两套配置文件:内置一套,项目自己一套

-SESSION_ENGINE = 'django.contrib.sessions.backends.db'

【2.2】django-session表的字段

  • session-key
    • sessionid:随机字符串
  • session-data
    • 我们真正存的数据---》加密成字符串
  • expire_data
    • 过期时间

【2.3】session操作

python 复制代码
# 获取、设置、删除Session中数据
request.session['k1']
request.session.get('k1',None)
request.session['k1'] = 123
request.session.setdefault('k1',123) # 存在则不设置
del request.session['k1']


# 所有 键、值、键值对
request.session.keys()
request.session.values()
request.session.items()
request.session.iterkeys()
request.session.itervalues()
request.session.iteritems()

# 会话session的key
request.session.session_key

# 将所有Session失效日期小于当前日期的数据删除
request.session.clear_expired()

# 检查会话session的key在数据库中是否存在
request.session.exists("session_key")

# 删除当前会话的所有Session数据(只删数据库)
request.session.delete()
  
# 删除当前的会话数据并删除会话的Cookie(数据库和cookie都删)。
request.session.flush() 
    这用于确保前面的会话数据不可以再次被用户的浏览器访问
    例如,django.contrib.auth.logout() 函数中就会调用它。

# 设置会话Session和Cookie的超时时间
request.session.set_expiry(value)
    * 如果value是个整数,session会在些秒数后失效。
    * 如果value是个datatime或timedelta,session就会在这个时间后失效。
    * 如果value是0,用户关闭浏览器session就会失效。
    * 如果value是None,session会依赖全局session失效策略。

【2.4】session的本质执行原理

python 复制代码
'''
1 咱么写了request.session['name']='lqz',本质就是向session 对象中放入了name=lqz
    2 当前视图函数结束-----》经过 【中间件】 ---》返回给了前端
        -django 内置了一个session中间件
        -判断:request.session 有没有变化,如果有变化
            - 情况一:django-session表中没有数据
                在表中创建出一条数据,随机生成一个字符串[随机字符串session_key],把数据存入django-session表
                session_key:adsfasd
                session_data: name=lqz  加密后存到里面
                把随机字符串写入到cookie中  :sessionid:adsfasd
            - 情况二:django-session表中有数据
                把session中所有的值--》加密后--》更新到django-session表的session_data中,其他不变
    3 下次 再发请求进入任意视图函数---》又会经过  【中间件】---》视图函数
        -视图函数中取session:request.session.get('age')
        -浏览器发请求---》携带cookie过来---》到了中间件---》根据sessionid取出随机字符串
        -拿着随机字符串去django-session中查【session_key】---》 能查到就把 session_data的数据解密---》放到request.session中
        -后续视图函数中,才能取出值


'''
相关推荐
brzhang5 分钟前
代码越写越乱?掌握这 5 种架构模式,小白也能搭出清晰系统!
前端·后端·架构
Asthenia04127 分钟前
为什么MySQL关联查询要“小表驱动大表”?深入解析与模拟面试复盘
后端
南雨北斗9 分钟前
分布式系统中如何保证数据一致性
后端
不爱学英文的码字机器11 分钟前
数字孪生的浪潮:从虚拟镜像到现实世界的 IT 变革
大数据·python
Asthenia041213 分钟前
Feign结构与请求链路详解及面试重点解析
后端
小白—人工智能14 分钟前
数据可视化 —— 直方图
python·信息可视化·数据可视化
左灯右行的爱情16 分钟前
缓存并发更新的挑战
jvm·数据库·redis·后端·缓存
brzhang20 分钟前
告别『上线裸奔』!一文带你配齐生产级 Web 应用的 10 大核心组件
前端·后端·架构
shepherd11121 分钟前
Kafka生产环境实战经验深度总结,让你少走弯路
后端·面试·kafka
袋鱼不重34 分钟前
Cursor 最简易上手体验:谷歌浏览器插件开发3s搞定!
前端·后端·cursor