ITPub博客

首页 > 应用开发 > IT综合 > Flask - Cookie的使用

Flask - Cookie的使用

原创 IT综合 作者:千锋Python唐小强 时间:2020-08-14 13:43:32 0 删除 编辑

Flask - Cookie的使用

用户使用浏览器第一次访问服务端时,服务端生成cookie,放在响应response里返回,并保存在用户浏览器里.


from flask 
import Flask,make_response

@app.route( '/set/<name>')
def set_cookie (name):
   response = make_response(redirect(url_for( 'hello')))
 response.set_cookie( 'name',name) # set_cookie视图会在生成的响应报文首部中创建一个Set-Cookie字段,即"Set-Cookie: name=xxx;Path=/"
 return response

用户下次访问同一个服务端时,会在header里携带已保存的cookie.

from flask 
import Flask,
request

@app.route( '/')
@app.route( '/hello')
def hello():
   name = request.args. get( 'name')  #如果查询参数里没有name值则从cookie获取
  if name is None:
   name = request.cookies. get( 'name', 'Human')  #从Cookie中获取name值
  return '<h1>Hello,%s</h1>' % name          

因为用户可以直接修改浏览器的cookie值,冒用他人账户,所以直接使用cookie是不安全的.

Flask提供了session对象用来将Cookie数据加密存储.(默认情况下,它会把数据存储在浏览器上一个名为session的cookie里)

app.secret_key = 'secret string' #设置密钥

更安全的做法是把密钥写进系统环境变量(在命令行中使用export或set命令),或是保存在.env文件中

SECRET_KEY=secret string

然后在程序脚本中使用os模块提供的getenv()方法获取:

app.secret_key = os.getenv('SECRET_KEY','secret string') #第二个参数是作为没有获取到对应环境变量时使用的默认值`

#结合使用

@app.route( '/login')
def login():
   session[ 'logged_in'] = True
   #写入session. 向session中添加一个名为logged_in的cookie,将它的值设为True.
   #使用session对象添加cookie时,数据会使用程序的密钥对其进行签名,加密后的数据存储在一块名为session的cookie里. 用户可以看到加密后的值,但无法修改它,一旦数据被修改,签名的值也会变化,这样在读取时会验证失败,对应的session值也会随之失效.
    return redirect(url_for( 'hello'))
@app.route( '/hello')
def hello():
   name = request.args. get( 'name')
    if name is None:
       name = request.cookies. get( 'name', 'Human')
       response = '<h1>Hello, %s!</h1>' % name
       
   #session中的数据可以像字典一样通过键读取,或是使用 get()方法.
    if 'logged_in' in session:  #根据用户认证状态返回不同的内容.
       response += '[Authenticated]'
    else:
       response += '[Not Authenticated]'
   
    return response

登出用户的账户,实际操作其实就是把代表用户认证的logged_in cookie删除,通过session对象的pop方法实现.


from flask 
import session

@app.route( '/logout')
def logout ():
  if 'logged_in' in session:
   session.pop( 'logged_in')
  return redirect(url_for( 'hello'))

默认情况下,session cookie会在用户关闭浏览器时删除.

通过将session.permanent属性设置为True可以将session的有效期延长为Flask.permanent_session_lifetime属性值对应的datetime.timedelta对象.

也可以通过配置变量PERMANENT_SESSION_LIFETIME设置,默认为31天.

尽管session对象会对Cookie进行签名并加密,但这种方式仅能够确保session的内容不会被篡改,加密后的数据借助工具仍然可以轻易读取(即时不知道密钥),所以绝对不能在session中存储用户密码等敏感信息.

Flask - Cookie的使用


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69923331/viewspace-2711729/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-05-14

  • 博文量
    995
  • 访问量
    584512