07.session与cookie
什么是cookie?
cookie:在网站中,HTTP请求是无状态的。也就是第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道请求的是哪个用户。cookie的出现是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4kb,因此使用cookie只能存储一些小量的数据
cookie有效期:服务器可以设置cookie的有效期,以后浏览器会自动的清除过期的cookie
cookie有域名的概念:只有访问同一个域名,才会把之前相同域名返回的cookie携带给服务器,也就是说,访问谷歌的时候,不会把百度的cookie发送给谷歌
cookie用法
secure设置为True只能在HTTPS协议下使用
httponly设置为True,cookie只能被浏览器读取,不能被js读取
expires无效日期
max_age:以秒为单位,距离现在多久过期
设置和删除cookie
设置
cookie
:设置cookie
在Response
对象上进行设置的,通过flask.Response
对象上的一个set_cookie()
方法来进行设置cookie
信息
删除
cookie
:通过flask.Response
对象上的一个delete_cookie()
方法来进行设置cookie
信息
设置cookie过期时间
设置cookie的有效期,默认有效期:知道浏览器关闭为止
使用max_age参数设置有效期事件
使用expires参数
注意:max_age在IE8以下的浏览器是不支持的。expires在新班的http协议中被废弃,但是到目前为止所有的浏览器都能够支持它
设置Cookie的有效域名
设置cookie
的有效域名:cookie
只能在主域名下使用。如果想要在子域名下使用,那么应该给"set_cookie"传递一个domain='.ty.com'
来指定其他子域名才能访问到这个cookie
信息。
定义蓝图
cms.py
注册蓝图
app.py
地址映射:在hosts文件中添加以下映射
设置set_cookie中的domain参数
什么是session?
session
和cookie
的作用类似,都是为了存储用户相关的信息,不同的是,cookie
是存储在本地浏览器,session
是一个思路/概念,一个服务器存储授权信息的解决方案,不同的服务器,不同的框架,不同的语言有不同的实现,虽然实现不一样,但是他们的目的都是服务器为了方便存储数据的。session
的出现,是为了解决cookie
存储数据不安全的问题的
cookie和session结合使用
由于随着web的开发,发展至今,一般有两种存储方式:
存储在服务端:通过
cookie
存储一个session_id
,然后具体的数据则是保存在session
中。如果用户已经登录,则服务器会在cookie
中保存一个session_id
,下次再次请求的时候,会把session_id
携带上来,服务器根据session_id
在session库中获取用户的session
数据,就能知道该用户到底是谁,以及之前保存的一些状态信息。这种专业术语叫做server side session
。存储在服务器的数据会更加的安全,不容易被窃取。但存储在服务器也有一定的弊端,就是会占用服务器的资源,但现在服务器以及发展至今,一些session
信息还是可以存储的将
session
数据加密,然后存储在cookie
中。这种专业术语叫做client side session
。flask采用的就是这种方式,但是也可以替换成其他形式
session用法
设置session
设置session在session对象上进行设置的,通过flask.session
对象上的一个session.setdefault()
方法或者字典来进行设置session信息
获取session
通过session.get()
方法获取
删除指定session
清除所有的session值
设置session有效期
通过配置config
进行设置,默认有效期为31天
注意,使用session需要配置SECRET_KEY
将session存储入redis中
安装
配置
SECRET_KEY
加密的密钥
SESSION_USE_SIGNER
是否对发送到浏览器上session的cookie值进行加密
SESSION_TYPE
session类型为redis
SESSION_KEY_PREFIX
保存到session中的值的前缀
PERMANENT_SESSION_LIFETIME
失效时间,单位秒
SESSION_REDIS
redis数据库连接
redis客户端
最后更新于
这有帮助吗?