当前位置: 首页 > 后端技术 > Python

Flask-饼干的使用

时间:2023-03-26 13:09:07 Python

Flask——Cookie的使用当用户第一次使用浏览器访问服务器时,服务器会生成一个cookie,在响应response中返回,并保存在用户的浏览器中。从flask导入Flask,make_response@app.route('/set/')defset_cookie(name):response=make_response(redirect(url_for('hello')))response.set_cookie('name',name)#set_cookie视图会在生成的响应报文的header中创建一个Set-Cookie字段,即"Set-Cookie:name=xxx;Path=/"returnresponse当用户下次访问同一个服务器时,保存的cookie会携带在header中。fromflaskimportFlask,request@app.route('/')@app.route('/hello')defhello():name=request.args.get('name')#如果没有name值查询参数,如果name为None,则从cookie中获取:name=request.cookies.get('name','Human')#从cookie中获取name值return'

Hello,%s

'%name因为用户可以直接修改浏览器的cookie值,冒用他人账号,所以直接使用cookie是不安全的。Flask提供了一个会话对象来加密和存储cookie数据。(默认情况下,它会将数据存储在浏览器上一个名为session的cookie中)app.secret_key='secretstring'#更安全的密钥设置方式是将密钥写入系统环境变量(使用export或set命令在命令行中),或者保存在.env文件中SECRET_KEY=secretstring然后在程序脚本中使用os模块提供的getenv()方法获取:app.secret_key=os.getenv('SECRET_KEY','secretstring')#第二个参数作为获取不到对应环境变量时的默认值`#结合使用@app.route('/login')deflogin():session['logged_in']=True#写入会话。将名为logged_in的cookie添加到会话中,并将其值设置为True。#使用session对象添加cookie时,会用程序的key对数据进行签名,加密后的数据存储在一个名为session的cookie中。用户可以看到加密后的值,但不能修改。一旦数据被修改,signedvalue也会发生变化,所以读取的时候校验会失败,相应的sessionvalue也会失败。returnredirect(url_for('hello'))@app.route('/hello')defhello():name=request.args.get('name')如果名字是None:name=request.cookies.get('name','Human')response='

Hello,%s!

'%name#session中的数据可以像字典一样按键读取,也可以使用get()方法。if'logged_in'insession:#根据用户认证状态返回不同的内容。response+='[Authenticated]'else:response+='[NotAuthenticated]'returnresponse注销用户账号,实际操作其实就是删除代表用户认证的logged_incookie,通过会话对象的弹出方法。fromflaskimportsession@app.route('/logout')deflogout():if'logged_in'insession:session.pop('logged_in')returnredirect(url_for('hello'))默认情况下,会话cookie将在用户关闭浏览器时被删除。通过设置session.permanent属性为True,可以将session的有效期延长到Flask.permanent_session_lifetime属性值对应的datetime.timedelta对象中。也可以通过配置变量PERMANENT_SESSION_LIFETIME来设置,默认是31天。虽然session对象会对cookie进行签名加密,但是这种方式只能保证session的内容不被篡改,加密后的数据还是可以借助工具很方便的读取(我不知道密钥即使我不知道密钥),因此不能在会话中存储用户密码等敏感信息。本文由博客群发等运营工具平台OpenWrite发布