zoukankan      html  css  js  c++  java
  • 【Flask】Flask Cookie操作

    ### 什么是cookie:
    在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。
    cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,
    当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。
    cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用cookie只能存储一些小量的数据。
    1. cookie有有效期:服务器可以设置cookie的有效期,以后浏览器会自动的清除过期的cookie。
    2. cookie有域名的概念:只有访问同一个域名,才会把之前相同域名返回的cookie携带给服务器。也就是说,访问谷歌的时候,不会把百度的cookie发送给谷歌。

    ### flask操作cookie:
    1. 设置cookie:设置cookie是应该在Response的对象上设置。`flask.Response`对象有一个`set_cookie`方法,可以通过这个方法来设置`cookie`信息。
    在Chrome浏览器中查看cookie的方式:
    * 右键->检查->Network->重新加载页面->找到请求,然后查看Response Headers中的cookie
    * 点击url输入框左边的信息icon,然后找到相应的域名,再展开查看cookie。
    * 在Chrome的设置界面->高级设置->内容设置->所有cookie->找到当前域名下的cookie。
    2. 删除cookie:通过`Response.delete_cookie`,指定cookie的key,就可以删除cookie了。

    ###Flask 设置/删除 cookie

     1 from flask import Flask, request, Response
     2 
     3 app = Flask(__name__)
     4 
     5 
     6 @app.route('/')
     7 def hello_world():
     8     resp = Response("saber's home")
     9     resp.set_cookie('username', 'saber')
    10     return resp
    11 
    12 
    13 @app.route('/del/')
    14 def delete_cookie():
    15     resp = Response("Saber's home 2")
    16     resp.delete_cookie('username')
    17     return resp
    18 
    19 if __name__ == '__main__':
    20     app.run(debug=True)

    ######. 设置cookie的有效期:
    * max_age:以秒为单位,距离现在多少秒后cookie会过期。
    * expires:为datetime类型。这个时间需要设置为格林尼治时间,也就是要距离北京少8个小时的时间。
    * 如果max_age和expires都设置了,那么这时候以max_age为标准。
    * max_age在IE8以下的浏览器是不支持的。expires虽然在新版的HTTP协议中是被废弃了,但是到目前为止,所有的浏览器都还是能够支持,所以如果想要兼容IE8以下的浏览器,那么应该使用expires,否则可以使用max_age。
    * 默认的过期时间:如果没有显示的指定过期时间,那么这个cookie将会在浏览器关闭后过期。

     1 from flask import Flask, request, Response
     2 from datetime import datetime, timedelta
     3 
     4 app = Flask(__name__)
     5 
     6 
     7 @app.route('/')
     8 def hello_world():
     9     resp = Response("saber's home")
    10     # resp.set_cookie('username', 'saber', max_age=60)
    11     # resp.set_cookie('username', 'saber', expires=datetime(2018, 4, 19, 14, 0, 0))
    12     expires = datetime.now() + timedelta(days=30, hours=16)
    13     resp.set_cookie('username', 'saber', expires=expires)
    14     return resp
    15 
    16 if __name__ == '__main__':
    17     app.run(debug=True)

    #### 设置cookie有效域名

    cookie默认是只能在主域名下使用。如果想要在子域名下使用,那么应该给`set_cookie`传递一个`domain='.hy.com'`,这样其他子域名才能访问到这个cookie信息。

     1 from flask import Flask, request, Response
     2 from datetime import datetime, timedelta
     3 from cmsviews import bp
     4 
     5 app = Flask(__name__)
     6 app.register_blueprint(bp)
     7 app.config['SERVER_NAME'] = 'hy.com:5000'
     8 
     9 
    10 @app.route('/')
    11 def hello_world():
    12     resp = Response("saber's home")
    13     # resp.set_cookie('username', 'saber', max_age=60)
    14     # resp.set_cookie('username', 'saber', expires=datetime(2018, 4, 19, 14, 0, 0))
    15     resp.set_cookie('username', 'saber', domain='.hy.com')
    16     return resp
    17 
    18 if __name__ == '__main__':
    19     app.run(debug=True)
  • 相关阅读:
    【笔记】二进制文件
    vs2015+64位win10系统ceres-solver编译
    python
    感受函数式编程-scala
    R语言diagram包画订单状态流图
    virtualbox下Centos6.5桥接模式上网配置方法
    配置对IIS上tabular的 HTTP 访问
    centos6.5下逻辑卷操作
    centos6.5下磁盘创建交换分区
    centos6.5下磁盘分区及挂载
  • 原文地址:https://www.cnblogs.com/chen0427/p/8886571.html
Copyright © 2011-2022 走看看