flask中的session

session相当于用密钥签名加密的cookie,即用户可以查看你的cookie,但是如果没有密钥就无法修改它。

使用会话之前你必须设置一个密钥:

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

app=Flask(__name__)

@app.route('/')

def index():

    if 'username' in session:

        return 'Logged in as %s' %escape(session['username'])

    return 'You are not logged in'

@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><input type=sumbit value=Login>

          </form>

          '''

@app.route('/logout')

def logout():

    #如果会话中有用户名就删除它

    session.pop('username',None)

    return redirect(url_for('index'))

#设置密钥,复杂一点

app.secret_key='A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'


这里用到的 escape() 是用来转义的。如果不使用模板引擎就可以像上例 一样使用这个函数来转义。

session的属性:

new:如果session是新的,那么就是True,否则是Flase

modified:如果session捕获到其已被修改,那么为True。但是在一些易变对象中,session的修改不被自动捕获,那么就需要自己显式地把它设置为True:

# this change is not picked up because a mutable object (here# a list) is changed.session['objects'].append(42)# so mark it as modified yourselfsession.modified = True

permanent:

如果设置为True的话,session的生命为 permanent_session_lifetime 秒(默认是31天)。如果设置为Flase的话,那么当用户关闭浏览器时,session便被删除了。

如何生成一个好的密钥:

可以使用随机生成器来生成一个好的随机种子:

>>>import os

>>>os.urandom(24)

'\xfd{H\xe5<\x95\xf9\xe3\x96.5\xd1\x01O<!\xd5\xa2\xa0\x9fR"\xa1\xa8'

基于 cookie 的会话的说明: Flask 会把会话对象中的值储存在 cookie 中。在打开 cookie 的情况下,如果你访问会话对象中没有的值,那么会得到模糊的错误信息:请检查 页面 cookie 的大小是否与网络浏览器所支持的大小一致。


转载于:https://my.oschina.net/935572630/blog/369962

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值