【python】Django系列Day04–Cookie和Session

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

文章目录

👊前言

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

🎨一、Cookie

1.状态保持

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

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

没错是饼干😄 😄 😄

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

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

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

; 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')
    response.set_cookie('sex', 'woman', max_age=60)
    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)

"""
        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
如果需要禁用session的话,就将上图的session中间件注释掉即可。

; 2.存储方式

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

1.数据库

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


SESSION_ENGINE='django.cintrib.sessions.backends.cache'
之中

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

如果存储在数据库中,需要在项INSTALLED_APP中安装Session应用。

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

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.cache'
SESSION_CACHE_ALIAS = "default"
  1. 设置session
request.session["name"] = "xiaoxian"
request.session["age"] = "18"
request.session.set_expiry(value)
闭浏览器后就清除掉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. 删除、清除

request.session.clear()
request.session.flush()

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

SESSION_COOKIE_NAME = "sessionid"

SESSION_COOKIE_PATH = "/"

SESSION_COOKIE_DOMAIN = None

SESSION_COOKIE_SECURE = False

SESSION_COOKIE_HTTPONLY = True

SESSION_EXPIRE_AT_BROWSER_CLOSE = False

SESSION_SAVE_EVERY_REQUEST = False

🎨四、session的其它操作


request.session.session_key

request.session.clear_expired()

request.session.exists("session_key")

request.session.delete("session_key")

总结

cookie和session到这里我们就讲完啦!!!!👍👍👍 如果有帮到你欢迎给个三连支持一下哦❤️ ❤️ ❤️
如果有哪些需要修改的地方欢迎指正啦!!!一起加油啦👏👏👏

Original: https://blog.csdn.net/weixin_53000329/article/details/124638138
Author: 奋斗中的小贤
Title: 【python】Django系列Day04–Cookie和Session

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/732140/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球