flask中的Session

本文深入探讨了Flask框架中Session的使用方法,包括如何设置secret_key、session的存储方式、验证流程以及如何配置永久session和其过期时间。通过实例展示了session在用户登录状态维护中的应用。

1. Flask 中 session 是需要 secret_key 的

from flask import session
app = Flask(__name__)
app.secret_key = "PW"  #必须设置serect_key

secret_key 实际上是用来加密字符串的,如果在实例化的app中没有 secret_key 那么开启session一定会抛异常的

2. session 的用法

@app.route("/login", methods=["GET", "POST"])
def login():
    if request.method == "POST":
        if request.form["username"] == "pw" and request.form["password"] == "123":
            session["user"] = USER["username"]  #设置session
            return redirect("/student")
        return render_template("login.html", msg="用户名密码错误")

    return render_template("login.html", msg="")  

3. cookies 中的 session 是什么

cookies 中 session 存储的是通过 secret_key 加密后的 key , 通过这个 key 从flask程序的内存中找到用户对应的session信息

4. 怎么用 session 进行验证呢?

@app.route("/student_list")
def student():
    if session.get("user"):
        return render_template("student_list.html", student=STUDENT_DICT)

    return redirect("/login")

5:其他的一些设置:

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

app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)#随机24的字符串
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=14) #设置过期多少天

@app.route('/')
def hello_world():
    session['username'] = 'zhiliao' #操作session就像操作字典一样
    #permanent持久化的意思,可以设置过期时间,时间为一个月
    session.permanent = True
    return 'Hello World!'


@app.route('/get_session/')
def get_session():
    username = session.get('username')
    return username or '凉拌'


@app.route('/delete_session/')
def delete_session():
    session.pop('username')
    session.clear()#是全部删除,跟字典的用法一样
    return '删除成功'


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

并非只有Flask框架用到了sessionsession机制是Web开发中用于跟踪用户会话状态的一种常用技术,许多其他Web框架也广泛使用了session。 例如,在Python的Django框架中,也有完善的session机制。Django的session默认存储在数据库中,也可以配置为存储在缓存(如Redis)中。以下是一个简单的Django使用session的示例: ```python # 在视图函数中使用session from django.http import HttpResponse def set_session(request): request.session['key'] = 'value' return HttpResponse('Session set') def get_session(request): value = request.session.get('key') return HttpResponse(f'Session value: {value}') ``` 在Java的Spring框架里,同样支持session管理。Spring可以通过`HttpSession`对象来存取session数据,示例代码如下: ```java import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class SessionController { @GetMapping("/setSession") public String setSession(HttpServletRequest request) { HttpSession session = request.getSession(); session.setAttribute("key", "value"); return "Session set"; } @GetMapping("/getSession") public String getSession(HttpServletRequest request) { HttpSession session = request.getSession(); String value = (String) session.getAttribute("key"); return "Session value: " + value; } } ``` 在Node.js的Express框架中,也可以使用`express-session`中间件来实现session功能,示例如下: ```javascript const express = require('express'); const session = require('express-session'); const app = express(); app.use(session({ secret: 'your-secret-key', resave: false, saveUninitialized: true })); app.get('/setSession', (req, res) => { req.session.key = 'value'; res.send('Session set'); }); app.get('/getSession', (req, res) => { const value = req.session.key; res.send(`Session value: ${value}`); }); app.listen(3000, () => { console.log('Server is running on port 3000'); }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值