admin管理员组

文章数量:1642351

一.关于cookie 和 session的一些基础知识

  1. http请求时无状态的,第一次和服务器连接后并且登录成功,第二次服务器仍然不知道
    当前是哪个用户。cookie就是为了解决这个问题
    cookie存在浏览器中的,相对于是浏览器的
    打开浏览器会发给服务器
  2. session存在服务器中,产生一个唯一的session_id
    服务器将session_id和敏感信息做一个映射存储在session(服务器)中,更加安全
  3. session会有过期时间(如超星 过几天需要重新登录)
  4. flask中的session机制
    • 把敏感数据加密之后放到session中,然后将session放到cookie中
      下次请求时候,再从浏览器中发送过来的cookie中读取session,并进行解密,获取最终用户数据
    • 节省开销,所有信息都在存储到客户端(浏览器)中,经过加密,也是比较安全
  5. flask session
    通过from flask import session。然后将值key和value进去即可
    并且Flask session机制是将session加密,然后存储在cookie中,如图所示。

二.项目结构


运行代码后,打开浏览器(右上角更多图标–>设置–>高级–>网站设置–>cookie),可以查看到一下内容

可以getSession查看刚才设置的cookie值

代码
from flask import Flask,session
import os
from datetime import timedelta

app = Flask(__name__)
app.config['SECRET_KEY'] =  os.urandom(24)
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) # 设置cookie 的时间为7天

@app.route('/')
def hello_world():
    session['username'] = 'jzj&jmm'
    # 没有指定session的过期时间,默认为浏览器关闭后就自动关闭
    # 设置该属性为True后, 当用户点击记住我的时候,会去检查 app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) 的属性,决定session的过期时间
    session.permanent = True # 过期时间为 31 天
    # 体现在浏览器的 登陆的时候 为记住我 默认为session 31 天

    return 'Hello World!'

# 获取session
@app.route('/getSession/')
def getSession():
    # 两种方式
    # session['username']如果username不存在,会抛出异常
    # 推荐使用 session.get('username') 如果username不存在,返回NULL
    return session.get('username')

# 删除 session
@app.route('/deleteSession/')
def deleteSeeion():
    print(session.get('username'))
    session.pop('username')
    return ('success delete session')

# 更为彻底的一种删除方式
@app.route('/deleteSession2/')
def deleteSession2():
    print(session.get('username'))
    # 删除session中的所有数据
    return ('success delete session')


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

会出现的一个问题

# 添加数据到session中
# 操作session和操作字典一样
"""
secret key:  24位 用os.urandom(24)产生
 - 设置 SECRET_KEY :config.py
 - 设置 SECRET_KEY :值
 - 作用:加密算法,作为‘盐’加入到传送字符串,并且通过打乱,
 即使有加密算法可逆计算,也不能得知这个字符串的含义

"""
  • 从flask中导入session
  • 使用session需要设置 SECRET_KEY,作为加密作用,并且这个SECRET_KEY,如果每次服务器重启之后都变化的话,那么之前的session就不能再通过这个SECRET_KEY进行解密了
  • 解决 将app.config[‘SECRET_KEY’] = os.urandom(24)写死即可

过期时间

主要体现在以下代码片段的设置

app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) # 设置cookie 的时间为7天

# 没有指定session的过期时间,默认为浏览器关闭后就自动关闭
# 体现在浏览器的 登陆的时候 为记住我 默认为session 31 天
# 设置该属性为True后, 当用户点击记住我的时候,会去检查 app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) 的属性,决定session的过期时间
session.permanent = True # 过期时间为 31 天

本文标签: 时间flasksessioncookie