07.session与cookie

cookie:在网站中,HTTP请求是无状态的。也就是第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道请求的是哪个用户。cookie的出现是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4kb,因此使用cookie只能存储一些小量的数据

  • cookie有效期:服务器可以设置cookie的有效期,以后浏览器会自动的清除过期的cookie

  • cookie有域名的概念:只有访问同一个域名,才会把之前相同域名返回的cookie携带给服务器,也就是说,访问谷歌的时候,不会把百度的cookie发送给谷歌

set_cookie(self, key, value='',max_age=None, expires=None,path='/', domain=None,
secure=False, httponly=False,samesite=None)
  • secure设置为True只能在HTTPS协议下使用

  • httponly设置为True,cookie只能被浏览器读取,不能被js读取

  • expires无效日期

  • max_age:以秒为单位,距离现在多久过期

  • 设置cookie:设置cookieResponse对象上进行设置的,通过flask.Response对象上的一个set_cookie()方法来进行设置cookie信息

@app.route('/')
def test_cookie():
    response = Response("cookie")
    response.set_cookie("A","B")
    return response

image-20200905072844719

  • 删除cookie:通过flask.Response对象上的一个delete_cookie()方法来进行设置cookie信息

  • 设置cookie的有效期,默认有效期:知道浏览器关闭为止

    • 使用max_age参数设置有效期事件

  • 使用expires参数

注意:max_age在IE8以下的浏览器是不支持的。expires在新班的http协议中被废弃,但是到目前为止所有的浏览器都能够支持它

设置cookie的有效域名:cookie只能在主域名下使用。如果想要在子域名下使用,那么应该给"set_cookie"传递一个domain='.ty.com'来指定其他子域名才能访问到这个cookie信息。

  1. 定义蓝图

cms.py

  1. 注册蓝图

app.py

  1. 地址映射:在hosts文件中添加以下映射

  1. 设置set_cookie中的domain参数

什么是session?

sessioncookie的作用类似,都是为了存储用户相关的信息,不同的是,cookie是存储在本地浏览器,session是一个思路/概念,一个服务器存储授权信息的解决方案,不同的服务器,不同的框架,不同的语言有不同的实现,虽然实现不一样,但是他们的目的都是服务器为了方便存储数据的。session的出现,是为了解决cookie存储数据不安全的问题的

由于随着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数据库连接

image-20200906054235652

redis客户端

下载

image-20200906060142893

最后更新于

这有帮助吗?