当前位置:   article > 正文

Flask中的session机制_flask的session机制

flask的session机制

cookie和session

  1. cookie:网站中,http请求是无状态的,第一次和服务器连接后并且登陆成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是解决了改问题,第一次登陆后服务器返回数据(cookie是存储数据的一种格式)给浏览器,然后浏览器保存到本地,用户第二次请求的时候,就会携带cookie数据自动携带给服务器,服务器通过浏览器携带的数据就能判断当前用户。cookie存储数据有限,不同浏览器不同的存储大小,但一般不超过4kb,因此cookie只能存储小量数据。
  2. session:session与cookie类似,都是存储用户相关信息,不同的是cookie存储在本地浏览器,session存储在服务器,存储在服务器的数据会更安全。但是存储在服务器会占用服务器的资源。
  3. cookie和session的结合使用:
    • 存储在服务端:通过cookie存储一个session_id,具体数据保存在session(存储数据的方式)中。用户如果已经登陆服务器会在cookie中保存一个session_id,下次请求的时候会把sessin_id携带上来,服务器根据session_id在session库中获取用户的session数据,就可以知道用户是谁。专业术语叫:sever side session
    • flask中将session数据加密,存储在cookie中,专业术语叫client side session。flask采用的就是这个方式。

flask中的session

  1. flask中的session机制是:把敏感数据加密后放入session中,然后把session存放到cookie中,下次请求的时候,从浏览器发来的cookie中读取session,再从session中读取敏感数据,并进行解密,来获取用户数据
  2. flask的这种session机制,可以节省服务器的开销,因为把所有的信息都存储到了客户端。
  3. 安全是相对的,把session放到cookie中,经过加密也是比较安全的。

flask中使用cookie和session

  1. cookies:在flask中操作cookie,通过response对象来操作,可以在response返回之前,通过response.set_cookie来设置。

    • key:设置的cookie的key
    • value:key对应的value
    • max_age:改cookie的过期时间,如果不设置,浏览器关闭就会过期
    • expires:过期时间,应该是datetime类型
    • domain:该cookie在哪个域名中有效,一般设置子域名。
    • path:该cookie在哪个路径下有效
  2. session:flask中的session是通过 from flask import session。然后添加key和value进去就可以。并且,flask中的session机制是将session信息加密,然后存储在cookie中。专业术语叫client side session

操作session

  1. session的操作:
    • 使用session需要从flask中导入session,以后所有和session相关的操作都是通过这个变量来的。
    • 使用session需要设置SECRET_KEY,用来作为加密用的,并且这个SECRET_KEY在每次启动服务器后都变化的话,之前的session就不能通过SECRET_KEY来解密
    • 操作session和操作字典一样。
    • 添加session['username']
    • 删除session.pop()
    • 清除所有session.clear()
    • 获取session.get()
  2. 设置session的过期时间
    • 没有制定session的过期时间,默认是浏览器关闭就自动结束。
    • 设置了sessionpermanent属性为True,那么过期时间是31天
    • 可以通过给app.config设置PERMANENT_SESSION_LEFTTIME来更改时间,这个值的数据类型是datetime.timedelta类型
import os
from datetime import timedelta
import config

app = Flask(__name__)
# app.config.from_object(config)
app.config['SECRET_KEY'] = os.urandom(24)  # 做加密用的,加密一般是加密算法或者加盐
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7)

# 添加数据到session中
# 操作session的时候,跟操作字典一样
# SECRET_KEY


@app.route('/')
def hello_world():
    session['username'] = 'hubo'
    # 不指定session的过期时间,默认是浏览器关闭就结束
    session.permanent = True    # 默认时间是一个月
    return 'Hello World!'


@app.route('/get/')
def get():
    return session.get('username')


@app.route('/delete/')
def delete():
    print(session.get('username'))
    session.pop('username')
    print(session.get('username'))
    return 'success'


@app.route('/clear')
def clear():
    print(session.get('username'))
    session.clear()
    print(session.get('username'))
    return 'success'


if __name__ == '__main__':
    app.run(debug=True)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/540564
推荐阅读
相关标签
  

闽ICP备14008679号