Flask Cookies Session

Flask Cookies

Cookie以文本文件的形式存储在客户端的计算机上。其目的是记住和跟踪与客户使用相关的数据,以获得更好的访问者体验和网站统计信息。

Request对象包含Cookie的属性。它是所有cookie变量及其对应值的字典对象,客户端已传输。除此之外,cookie还存储其网站的到期时间,路径和域名。

在Flask中,对cookie的处理步骤为:

  1. 设置cookie:

设置cookie,默认有效期是临时cookie,浏览器关闭就失效

可以通过 max_age 设置有效期, 单位是秒

 resp = make_response("set cookie success")   # 设置响应体
 resp.set_cookie("serendipity", "serendipity", max_age=4096)
  1. 获取cookie

获取cookie,通过request.cookies的方式, 返回的是一个字典,可以获取字典里的相应的值

cookie_1 = request.cookies.get("serendipity")
  1. 删除cookie

这里的删除只是让cookie过期,并不是直接删除cookie

删除cookie,通过delete_cookie()的方式, 里面是cookie的名字

resp = make_response("del cookie success")  # 设置响应体
resp.delete_cookie("serendipity")

示例

from flask import Flask, make_response, request # 注意需导入 make_response

app = Flask(__name__)

@app.route("/set_cookies")
def set_cookie():
    resp = make_response("set cookie success")  # 设置响应体
    resp.set_cookie("serendipity", "serendipity", max_age=4096)
    return resp

@app.route("/get_cookies")
def get_cookie():
    cookie_1 = request.cookies.get("serendipity")  # 获取名字为serendipity对应cookie的值
    return cookie_1

@app.route("/delete_cookies")
def delete_cookie():
    resp = make_response("del cookie success")  # 设置响应体
    resp.delete_cookie("serendipity")
    return resp

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

设置Cookie

设置Cookie

响应信息

响应信息

获取Cookie

获取Cookie

”删除“Cookie

”删除“Cookie

响应信息

响应信息

这里可以看到只是让Cookie过期,而非真正删除Cookie

Flask Session

与Cookie不同,**Session(会话)**数据存储在服务器上。会话是客户端登录到服务器并注销服务器的时间间隔。需要在该会话中保存的数据会存储在服务器上的临时目录中。

为每个客户端的会话分配会话ID。会话数据存储在cookie的顶部,服务器以加密方式对其进行签名。对于此加密,Flask应用程序需要一个定义的密钥(SECRET_KEY)。

Session对象也是一个字典对象,包含会话变量和关联值的键值对。

例如,要设置一个**‘username’**会话变量,请使用以下语句:

Session['username'] = 'admin'

要释放会话变量,请使用**pop()**方法。

session.pop('username', None)

示例

from flask import render_template
from flask import make_response
from flask import Flask, session, redirect, url_for, escape, request

app = Flask(__name__)
app.secret_key = 'asdfghjklqwertyuiopzxcvbnm'   #设置密钥

@app.route('/')
def index():
    # 判断用户名是否存在Session中,有显示登录成功界面,无显示登录界面
    if 'username' in session:
        username = session['username']
        return '登录用户名是:' + username + '<br>' + "<b><a href = '/logout'>点击这里注销</a></b>"
    return "您暂未登录, <br><a href = '/login'></b>" +  "点击这里登录</b></a>"


@app.route('/login', methods = ['GET', 'POST'])
def login():
    if request.method == 'POST':
        session['username'] = request.form['username']
        return redirect(url_for('index'))
    return '''
    <form action = "" method = "post">
      <p><input type="text" name="username"/></p>
      <p><input type="submit" value ="登录"/></p>
    
    </form>
    
    '''

@app.route('/logout')
def logout():
    # 从会话中删除用户名username(如果存在)
    session.pop('username', None)
    #重定向到首页
    return redirect(url_for('index'))

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

效果演示

未登录

未登录

登录界面

登录界面

登录成功

登录成功
如果你希望访问源码:Flask-code gitee

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值