阅读:72
🙋作者:爱编程的小贤
⛳知识点:Django–cookie和session
🥇:每天学一点,早日成大佬
💎 💎 💎今天我们进入Django第四部分的学习啦!!! 🚀 🚀 🚀学习之前先要好好复习回顾前面的内容哦!!!
如果你看完感觉对你有帮助,,,欢迎给个三连哦💗!!!您的支持是我创作的动力。🌹 🌹 🌹 🌹 🌹 🌹 感谢感谢!!!😘😘😘
没错是饼干😄 😄 😄
接着看下来吧!!!😁 😁 😁
Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。
Cookie最早是网景公司的前雇员LouMontulli在1993年3月的发明。Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。
Cookie名称和值可以由服务器端开发自己定义,这样服务器可以知道该用户是否是合法用户以及是否需要重新登录等。服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型记住用户名。
Cookie是存储在浏览器中的一段纯文本信息,建议不要存储敏感信息如密码,因为电脑上的浏览器可能被其它人使用。
可以按照过期时间分为两类:
会话cookie和持久cookie。
1、会话cookie是一种临时cookie,用户退出浏览器,会话Cookie就会被删除了。
2、持久cookie则会储存在硬盘里,保留时间更长,关闭浏览器,重启电脑,它依然存在,通常是持久性的cookie会维护某一个用户周期性访问服务器的配置文件或者登录信息。
1.我们的浏览器第一次请求服务器的时候,不会携带任何cookie信息
2.服务器接收到请求之后,发现请求中没有任何cookie信息
3.服务器设置一个cookie.这个cookie设置在响应中
4.我们的浏览器接收到这个响应之后,发现响应中有cookie信息,浏览器会将cookie信息保存起来 第二次及其之后的过程
5.当我们的浏览器第二次以及之后的请求都会携带cookie信息
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
利用request的request.COOKIES[‘键名’]来获取cookie
def get_cookie(request):
"""获取cookie"""
name = request.COOKIES['name']
return HttpResponse(name)
Django项目默认启用Session。
可以在settings.py文件中查看,如图所示:
如果需要禁用session的话,就将上图的session中间件注释掉即可。
在settings.py文件中,可以设置session数据的存储方式,可以保存的在数据库、本地缓存等。
存储在数据库中,如下设置可以写,也可以不写,这是默认存储方式。
# SESSION_ENGINE='django.cintrib.sessions.backends.db'
# SESSION_ENGINE='django.cintrib.sessions.backends.cache_db' # 存储于混合型的数据库之中,即二者皆用
SESSION_ENGINE='django.cintrib.sessions.backends.cache' # 存储于非关系型的数据库
之中
如果存储在数据库中,需要在项INSTALLED_APP中安装Session应用。
在redis中保存session,需要引入第三方扩展,我们可以使用django-redis来解决
pip install django-redis
在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" # 指定缓存的默认库
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来设置全局默认值
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()
# 删除session
request.session.clear() # 清除所有的session,在存储中删除值部分。
request.session.flush() # 清除session数据,在存储中删除session的整条数据。
# del request.session['键']
# 删除session中的指定键与值,在存储中只删除某个键及对应的值
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的随机字符串
request.session.session_key
# 将所有Session失效日期小于当前日期的数据删除
request.session.clear_expired()
# 检查 用户session的随机字符串 在数据库中是否
request.session.exists("session_key")
# 删除当前用户的所有Session数据
request.session.delete("session_key")
cookie和session到这里我们就讲完啦!!!!👍👍👍 如果有帮到你欢迎给个三连支持一下哦❤️ ❤️ ❤️
如果有哪些需要修改的地方欢迎指正啦!!!一起加油啦👏👏👏