python后台代码规范----登录会话(session)

本文详细探讨了Flask框架中的session概念,包括其基于cookie的实现方式、操作方法、生命周期,以及默认的安全机制。文章介绍了session的创建、读取、删除和设置永久性,并讨论了session.load()和session.get()的区别。还提到了如何自定义session的过期时间,以及session数据的安全存储。通过对Flask session的工作原理的剖析,帮助读者深入理解这一关键功能。
摘要由CSDN通过智能技术生成

Flask session 概念:

程序可以把数据存储在用户会话中,用户会话是-种私有存储,默认情况下,它会保存在客户端cookie中。Flask提供了session 对
象来操作用户会话。session 是基于cookie实现, 保存在服务端的键值对(形式为 {随机字符串:‘xxxxxx’}), 同时在浏览器中的cookie中也对应一相同的随机字符串,用来再次请求的 时候验证;

注意 :Flask中的session是存在浏览器中 默认key是session(加密的cookie),使用session时要设置一个密钥app. secret_ key

操作session就像操作python 中的字典一样,我们可以使用session[‘user’]获取值,也可以使用session. get(‘user’)获取值。

因为session就像字典一样所以,操作它的时候有两种方法:

(1)result = session[‘username’] :如果内容不存在,将会报异常

(2)result = session.get(‘username’) :如果内容不存在,将返回None(推荐用法)

所以,使用第二种方法获取session较好。

下面的代码中展示了session的设置、读取、删除、清除


from flask import Flask, session
from datetime import timedelta
import os
 
app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7)  # 配置7天有效
 
 
# 设置session
@app.route('/')
def set():
    session['username'] = 'zhangvalue'  # 设置“字典”键值对
    session.permanent = True  # 设置session的有效时间,长期有效,一个月的时间有效,
    # 具体看上面的配置时间具体的,没有上面设置的时间就是一个月有效
    print(app.config['SECRET_KEY'])
    return 'success'
 
 
# 读取session
@app.route('/get')
def get():
    # 第一种session获取如果不存在会报错
    # session['username']
    # 推荐使用session.get('username')
    # session.get('username')
    return session.get('username')
 
 
# 删除session
@app.route('/delete/')
def delete():
    print(session.get('username'), session.pop('username', None))
    # 或者 session['username'] = False
    print(session.get('username'))
    return 'success'
 
 
# 清除session中所有数据
@app.route('/clear')
def clear():
    print(session.get('username'))
    # 清除session中所有数据
    session.clear
    print(session.get('username'))
    return 'success'
 
 
if __name__ == '__main__':
    app.run(host='0.0.0.0', port='5010')

在获取session的时候如果如果使用第一种方法,不存在经就会报错,因为不存在key为username2

KeyError: 'username2'

设置session的过期时间

如果没有指定session的过期时间,那么默认是浏览器关闭后就自动结束。

session.permanent = True在flask下则可以将有效期延长至一个月。下面有方法可以配置具体多少天的有效期。

如果没有指定session的过期时间,那么默认是浏览器关闭后就自动结束

如果设置了session的permanent属性为True,那么过期时间是31天。

可以通过给app.config设置PERMANENT_SESSION_LIFETIME来更改过期时间,这个值的数据类型是datetime.timedelay类型。

一种更先进的配置有效期的方法:(比如配置7天有效)

1.引入包:from datetime import timedelta

2.配置有效期限:app.config[‘PERMANENT_SESSION_LIFETIME’] = timedelta(days=7) # 配置7天有效

3.设置:session.permanent = True

再次认识session

flask的session是基于cookie的会话保持。简单的原理即:

当客户端进行第一次请求时,客户端的HTTP request(cookie为空)到服务端,服务端创建session,视图函数根据form表单填写session,请求结束时,session内容填写入response的cookie中并返回给客户端,客户端的cookie中便保存了用户的数据。

当同一客户端再次请求时, 客户端的HTTP request中cookie已经携带数据,视图函数根据cookie中值做相应操作(如已经携带用户名和密码就可以直接登陆)。

在 flask 中使用 session 也很简单,只要使用 from flask import session 导入这个变量,在代码中就能直接通过读写它和 session 交互。

from flask import Flask, session, escape, request
 
app = Flask(__name__)
app.secret_key = 'please-generate-a-random-secret_key'
 
 
@app.route("/")
def index():
    if 'username' in session:
        return 'hello, {}\n'.format(escape(session['username']))
    return 'hello, stranger\n'
 
 
@app.route("/login", methods=['POST'])
def login():
    session['username'] = request.form['username']
    return 'login success'
 
 
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

上面这段代码模拟了一个非常简单的登陆逻辑,用户访问 POST /login 来登陆,后面访问页面的时候 GET /&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值