【python】Django系列Day04--Cookie和Session

这篇具有很好参考价值的文章主要介绍了【python】Django系列Day04--Cookie和Session。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🙋作者:爱编程的小贤
⛳知识点:Django–cookie和session
🥇:每天学一点,早日成大佬

👊前言

💎 💎 💎今天我们进入Django第四部分的学习啦!!! 🚀 🚀 🚀学习之前先要好好复习回顾前面的内容哦!!!
如果你看完感觉对你有帮助,,,欢迎给个三连哦💗!!!您的支持是我创作的动力。🌹 🌹 🌹 🌹 🌹 🌹 感谢感谢!!!😘😘😘


🎨一、Cookie

1.状态保持

  • 浏览器请求服务器是无状态的。
  • 无状态:指一次用户请求时,浏览器、服务器无法知道之前这个用户做过什么,每次请求都是一次 新的请求。
  • 无状态原因:浏览器与服务器是使用Socket套接字进行通信的,服务器将请求结果返回给浏览器之后,会关闭当前的Socket连接,而且服务器也会在处理页面完毕之后销毁页面对象。
  • 有时需要保持下来用户浏览的状态,比如用户是否登录过,浏览过哪些商品等
  • 实现状态保持主要有两种方式:
    • 客户端存储信息使用 Cookie
    • 服务器端存储信息使用 Session

2.什么是cookie?它的作用是什么?

没错是饼干😄 😄 😄

【python】Django系列Day04--Cookie和Session,Django,django,服务器,python

接着看下来吧!!!😁 😁 😁

Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。
Cookie最早是网景公司的前雇员LouMontulli在1993年3月的发明。Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。
Cookie名称和值可以由服务器端开发自己定义,这样服务器可以知道该用户是否是合法用户以及是否需要重新登录等。服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型记住用户名。
Cookie是存储在浏览器中的一段纯文本信息,建议不要存储敏感信息如密码,因为电脑上的浏览器可能被其它人使用。

3.cookie的类型

可以按照过期时间分为两类:
会话cookie和持久cookie。
1、会话cookie是一种临时cookie,用户退出浏览器,会话Cookie就会被删除了。
2、持久cookie则会储存在硬盘里,保留时间更长,关闭浏览器,重启电脑,它依然存在,通常是持久性的cookie会维护某一个用户周期性访问服务器的配置文件或者登录信息。

4.cookie的特点

  • cookie以键值对的格式进行信息的存储。
  • cookie基于域名安全,不同域名的cookie是不能互相访问的。
  • 当浏览器请求某网站时,会将浏览器存储的跟网站相关的所有cookie信息提交给网站服务器。
  • cookie是有过期时间的,如果不指定,默认关闭浏览器之后cookie就会过期。

5.cookie的流程

1.我们的浏览器第一次请求服务器的时候,不会携带任何cookie信息
2.服务器接收到请求之后,发现请求中没有任何cookie信息
3.服务器设置一个cookie.这个cookie设置在响应中
4.我们的浏览器接收到这个响应之后,发现响应中有cookie信息,浏览器会将cookie信息保存起来 第二次及其之后的过程
5.当我们的浏览器第二次以及之后的请求都会携带cookie信息
6.我们的服务器接收到请求之后,会发现请求中携带cookie信息,这样的话就认识是谁发出的请求

【python】Django系列Day04--Cookie和Session,Django,django,服务器,python

6.设置cookie

对 HttpResponse()对象的set_cookie方法进行设置
HttpResponse().set_cookie(“a”,“b”,max_age=时长(int))

第一个参数是键名
第二参数是对应的值
参数max_age 设置过期时间,单位是秒
参数expires 设置到哪个时间过期 日期类型

def cookie_set1(request):
    response = HttpResponse()

    response.set_cookie('name', 'IU')   # 如果没有设置cookie的有效期的话,表示当前设置的cookie为会话cookie
    response.set_cookie('sex', 'woman', max_age=60)     # max_age,设置cookie的有效期,单位为秒
    response.set_cookie('height', '165', expires=60)
    response.set_cookie('weight', '45', expires='Sat Aug-28-2021 14:50:50 CST', httponly=True)
    response.set_cookie('yaowei', '280', expires=datetime(2021, 8, 28, 14, 50, 50), httponly=True)
    # 注意设置cookie的键的时候不要用中文
    # cookie以及session的设置都是使用的西八区的时区进行设置
    """
        expires:
        1. 同max_age一样,值为整型,单位为秒
        2. 格林威治时间:Sat Aug-28-2021 13:50:50 GMT
        3. datatime   默认也是使用的西八区的时区,比北京时间多8个小时,所以如果要设置为北京时间的有效期的话可以将其小时减少8个小时
        
        path='/':   指定cookie在网站域名中的存储路径
            此时表示cookie存放于当前域名的根路径
        
        domain:表示cookie允许获取的域名
            127.0.0.1
            xiaoyy.com
        secure:
            值类型为布尔类型,当其值为True的时候,表示仅允许在HTTPS请求时才能够访问到cookie
            反之则http也能够获取到cookie
        httponly:
            值类型是bool类型,当其为True,cookie就不能够通过js来获取
            反之则js能够获取到
    """
    return response

7.获取cookie

利用request的request.COOKIES[‘键名’]来获取cookie

def get_cookie(request):
  """获取cookie"""
  name = request.COOKIES['name']
  return HttpResponse(name)

🎨二、Session

1.启用session

Django项目默认启用Session。

可以在settings.py文件中查看,如图所示:
【python】Django系列Day04--Cookie和Session,Django,django,服务器,python
如果需要禁用session的话,就将上图的session中间件注释掉即可。

2.存储方式

在settings.py文件中,可以设置session数据的存储方式,可以保存的在数据库、本地缓存等。

1.数据库

存储在数据库中,如下设置可以写,也可以不写,这是默认存储方式。

# SESSION_ENGINE='django.cintrib.sessions.backends.db'
# SESSION_ENGINE='django.cintrib.sessions.backends.cache_db' # 存储于混合型的数据库之中,即二者皆用
SESSION_ENGINE='django.cintrib.sessions.backends.cache'   # 存储于非关系型的数据库
之中

【python】Django系列Day04--Cookie和Session,Django,django,服务器,python

如果存储在数据库中,需要在项INSTALLED_APP中安装Session应用。
【python】Django系列Day04--Cookie和Session,Django,django,服务器,python

2.Redis

在redis中保存session,需要引入第三方扩展,我们可以使用django-redis来解决

  1. 安装扩展

pip install django-redis

  1. 配置

在settings.py文件中做如下配置:

CACHES= {
  "default": {
    "BACKEND": "django_redis.cache.RedisCache",
    "LOCATION": "redis://127.0.0.1:6379/0",
    "OPTIONS": {
      "CLIENT_CLASS": "django_redis.client.DefaultClient",
   }
 }
}
# SESSION_ENGINE='django.contrib.sessions.backends.db'
# SESSION_ENGINE='django.contrib.sessions.backends.cache_db' # 存储于混合型的数据库之中,即二者皆用
SESSION_ENGINE='django.contrib.sessions.backends.cache'   # 存储于非关系型的数据库之中
SESSION_CACHE_ALIAS = "default"   # 指定缓存的默认库
  1. 设置session
request.session["name"] = "xiaoxian"
request.session["age"] = "18"    # 默认两周有效期
request.session.set_expiry(value)   # 设置有效期,单位:秒,如果值为0,那么也是关
闭浏览器后就清除掉session
# 如果value是一个整数,session将在value秒没有活动后过期
# 如果value为0,那么用户的Cookie将在用户的浏览器关闭时过期。
# 如果value为None,那么session有效期将采用系统默认值,默认为两周,可以通过在
settings.py中设置SESSION_COOKIE_AGE来设置全局默认值
  1. 查询
name = request.session.get("name")
mobile = request.session.get("mobile","123123123")  # 如果没有这个键,就返回其默认值,没有默认值就返回空
print(name)
 # 所有 键、值、键值对
request.session.keys()
request.session.values()
request.session.items()
request.session.iterkeys()
request.session.itervalues()
request.session.iteritems()
  1. 删除、清除
# 删除session
request.session.clear()  # 清除所有的session,在存储中删除值部分。
request.session.flush()  # 清除session数据,在存储中删除session的整条数据。
# del request.session['键']  
# 删除session中的指定键与值,在存储中只删除某个键及对应的值

🎨三、session 在settings.py文件中的其他参数设置

SESSION_COOKIE_NAME = "sessionid"           
# Session的cookie保存在浏览器上时的key,即:sessionid

SESSION_COOKIE_PATH = "/"               
# Session的cookie保存的路径(默认)

SESSION_COOKIE_DOMAIN = None              
# Session的cookie保存的域名(默认)

SESSION_COOKIE_SECURE = False              
# 是否Https传输cookie(默认)

SESSION_COOKIE_HTTPONLY = True             
# 是否Session的cookie只支持http传输(默认)

SESSION_EXPIRE_AT_BROWSER_CLOSE = False         
# 是否关闭浏览器使得Session过期(默认)

SESSION_SAVE_EVERY_REQUEST = False           
# 是否每次请求都保存Session,默认修改之后才保存(默认)

🎨四、session的其它操作

# 用户session的随机字符串
request.session.session_key

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

# 检查 用户session的随机字符串 在数据库中是否
request.session.exists("session_key")

# 删除当前用户的所有Session数据
request.session.delete("session_key")

总结

cookie和session到这里我们就讲完啦!!!!👍👍👍 如果有帮到你欢迎给个三连支持一下哦❤️ ❤️ ❤️
如果有哪些需要修改的地方欢迎指正啦!!!一起加油啦👏👏👏文章来源地址https://www.toymoban.com/news/detail-692740.html

到了这里,关于【python】Django系列Day04--Cookie和Session的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Django基础入门⑬:Cookie和Session详讲和Django HTML表单实战讲解

    🏘️🏘️个人简介:以山河作礼。 🎖️🎖️: Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主,CSDN内容合伙人 🎁🎁:Web全栈开发专栏:《Web全栈开发》免费专栏,欢迎阅读! 🎁🎁: 文章末尾扫描二维码可以加入粉丝交流群,不定期免费送书。 📑📑 在 Dja

    2024年02月13日
    浏览(40)
  • Django模板,Django中间件,ORM操作(pymysql + SQL语句),连接池,session和cookie, 缓存

    今日概要: 模板 中间件 ORM操作(pymysql + SQL语句) session和cookie 缓存(很多种方式) 请求周期 路由系统 最基本路由关系 动态路由(含正则) 路由分发不同的app中 + include + 本质 + name + namespace 视图 类和函数(FBV和CBV) 参数 request 请求数据 自定义数据 响应 其他知识 虚拟环

    2024年02月04日
    浏览(40)
  • 跨越HTTP无状态边界:Cookie与Session在Django中的实战应用

    本文深入探索了Django中的Cookie和Session,解析了如何应对HTTP协议的无状态性问题,说明其基础概念,分析工作原理,并讨论何时应选择使用Cookie或Session。文章进阶部分,提出高效管理Cookie和Session,以及如何利用它们进行用户身份验证。 HTTP,即超文本传输协议,是一种应用层

    2024年02月13日
    浏览(41)
  • Python 框架学习 Django篇 (五) Session与Token认证

    我们前面经过数据库的学习已经基本了解了怎么接受前端发过来的请求,并处理后返回数据实现了一个基本的登录登出效果,但是存在一个问题,我们是将所有的请求都直接处理了,并没有去检查是否为已经登录的管理员发送的,如果是这样的话客户端可以不选择登录直接去

    2024年02月07日
    浏览(39)
  • 将本地Django项目部署到服务器上(Ubuntu20.04)

    最近因为项目的需求开始正在搭建一个个人网站。在本地完成了项目后端的内容后需要部署到服务器上以供用户访问。因为后端使用的是Django框架,就在网上找了很多有关将Django项目部署到网站上的教程。由于本人在网络这块属于小白,原理了解甚少,在一边参照各种教程一

    2024年02月03日
    浏览(49)
  • 安全学习DAY23_Cookie&Session&Token

    Cookie和Session都是用来在Web应用程序中跟踪用户状态的机制 1、存储位置不同: Cookie是存储在客户端(浏览器)上的,而Session是存储在服务器端的。 2、安全性不同: Cookie存储在客户端上,可能会被黑客利用窃取信息,而Session存储在服务器上,更加安全。 3、存储容量不同:

    2024年02月09日
    浏览(32)
  • Python系列-Django-Ninja

    适用对象: 有一定python和django基础,对此技术感兴趣,或者想快速尝试、实现效果的。 原则: 实用为主,效果为主 不重复造轮子,但应该知道其工作原理 官网是最好的教程,其它只是辅助 Django Ninja 是一个使用 Django 和 Python 3.6+ 类型提示构建 API 的 Web 框架。 官网地址 做记

    2023年04月08日
    浏览(23)
  • Django_设置和读取cookie

    在响应对象中使用set_cookie方法设置cookie 注:响应对象指 HttpResponseBase 及其所有子类 调用上面视图方法,查看设置的cookie 在传入的request对象中的COOKIES中以字典类型保存着所有cookie 调用上面视图方法,查看读取的cookie   各位想获取源码的朋友请 点赞 + 评论 + 收藏 ,三连!

    2024年02月16日
    浏览(29)
  • 「PHP系列」PHP Cookie/Session详解

    在PHP中,Cookie是一种用于在浏览器和服务器之间传递信息的机制。它通常用于跟踪用户的会话状态、存储用户的偏好设置或实现其他需要跨请求保持状态的功能。 名称和值 :每个Cookie都有一个名称和一个值,用于标识和存储信息。 过期时间 :可以设置Cookie的过期时间,以便

    2024年04月23日
    浏览(41)
  • Python Web开发记录 Day7:Django(Web框架) part 1

    名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN) (一个喜欢古诗词和编程的Coder😊) 在当今迅速发展的互联网时代,开发高效、安全且可扩展的网站变得越来越重要。Python语言因其简洁的语法和强大的功能而广受欢迎,而Django则是P

    2024年03月11日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包