flask session

1. Flask的Session概述

Flask提供了灵活可扩展性的Session支持,通过session,可以在服务器端保持和管理一个用户的状态信息。在Flask中,Session对象是由一个字典封装的对象,它可以储存各种不同类型的数据(如字符串、整数、对象等)和数据结构(如列表、字典等)。

1.1 什么是Session?

Web应用程序中,客户端和服务器端通常需要共享数据。每当客户端和服务器端之间发送请求和响应时,数据(或状态)被传递,通常以cookie的形式存储在客户端和服务器之间。而Session则是一种在服务器和客户端之间保存数据的方式,它允许在多个请求之间保持一些数据(如用户信息、购物车内容等)。

1.2 Flask Session的特点

Flask Session有以下特点:

灵活:可以存储多种类型的数据

安全:session数据存储在服务器端,客户端无法修改

可扩展性:可以轻松地扩展Session支持

自动:Session对象是自动创建的

2. Flask Session的安装

Flask Session默认没有安装,需要安装扩展库。最常用的是Flask-Session,顾名思义,它提供了Session支持的扩展。

pip install flask-session

3. Flask Session的用法

3.1 启用Session

在Flask中启用Session支持,需要在Flask应用中进行配置。Flask应用的配置存储在app.config字典中,可以通过配置对象或文件进行设置。

首先导入Session扩展:

from flask_session import Session

然后初始化Session扩展,将其与app实例绑定:

app = Flask(__name__)

#配置Session

app.config['SECRET_KEY'] = 'secret_key'

app.config['SESSION_TYPE'] = 'filesystem'

Session(app)

在这个例子中,我们配置了SESSION_TYPE为Filesystem,表示将Session数据存储在文件系统中。应该选择一个永久性的存储位置,例如/tmp目录或者在Linux服务器中的/var/run目录。

3.2 Session的基本用法

设置Session:

from flask import Flask, session

@app.route('/set_session')

def set_session():

session['username'] = 'jack'

return 'Session set!'

获取Session:

@app.route('/get_session')

def get_session():

username = session.get('username')

return 'username is ' + username

需要注意的一点是,如果访问不存在的Session,会得到一个'Requested unknown session'的错误。

3.3 Session的过期时间

Session默认情况下是永不过期的,但可以设置其过期时间。

将Session过期时间设置为10分钟:

app.permanent_session_lifetime = timedelta(minutes=10)

3.4 Session的销毁

可以通过session.pop(key)方法来删除Session中的值,也可以使用session.clear()方法来销毁整个Session。

删除一个键值:

@app.route('/pop_session')

def pop_session():

session.pop('username', None) #如果key不存在则返回None

return 'Session pop!'

清除所有会话:

@app.route('/clear_session')

def clear_session():

session.clear()

return 'Session cleared!'

4. Flask-Session的配置选项

Flask-Session支持多种配置选项,常用的配置选项包括:

4.1 SESSION_TYPE

可以设置不同的存储方式,例如:

redis

memcached

filesystem(默认)

不同的存储方式需要相应的配置信息,例如Redis存储要求Redis服务器、端口、密码等相关信息。

4.2 SESSION_COOKIE_NAME

Session的cookie的名称。默认为‘session’。

4.3 SESSION_COOKIE_DOMAIN

Session的cookie的域名。默认为None

4.4 SESSION_COOKIE_PATH

Session的cookie的路径。默认为‘/’

4.5 SESSION_COOKIE_HTTPONLY

设置Session的cookie不能被JavaScript访问。默认为True。

4.6 SESSION_COOKIE_SECURE

设置Session的cookie只能通过https协议发送。默认为False。

5. 总结

Session是Web应用程序中共享数据的最常用方式之一,Flask提供了简单而灵活的Session支持。在Flask中,Session由一个字典封装的对象,在服务器和客户端之间共享数据。Flask-Session是Flask中的Session支持扩展,提供了多种Session存储方式的实现。通过在Flask应用程序中的配置,可以轻松使用Session.

后端开发标签