cookie默认只能在主域名下使用,如果我们想要在子域名下使用cookie,该怎么办呢?下面汤锅就教大家如何在子域名下愉快的使用cookie。
首先新建一个cookie_demo文件,其代码如下:
rom flask import Flask,Response
app = Flask(__name__)
@app.route("/")
def index():
respon = Response("设置cookie")
# set_cookie:设置cookie ,第一个为key,第二个为value
respon.set_cookie("name","tlj")
return respon
if __name__ == "__main__":
app.run(debug=True)
由于我们要在子域名下调用主域名的cookie,所以我们首先得创建一个子域名,如何创建子域名??相信看过汤锅前面关于蓝图文章的同学,一定知道如何创建子域名,实在不知道的同学,请访问《蓝图子域名如何实现》一文。
子域名可以通过蓝图方式来实现,我们创建一个blue_demo文件(用于写蓝图代码),其代码如下:
from flask import Blueprint,request
bp = Blueprint("cms_bp",__name__,subdomain="cms")
@bp.route("/")
def index():
name = request.cookies.get("name")
#如果有name这个key,则返回name对应的值,否则返回没有获取到name值
return name or "没有获取到name值"
蓝图写好了,我们在主app文件将其导入进来。代码如下:
from bp_demo import bp
蓝图导入到主app文件后,我们是不是还得将蓝图注册到app中,是吧!!注册代码如下:
app.register_blueprint(bp)
OK,蓝图注册好了,我们还得对其进行配置。哼哼!!是配置,不是配偶啊!!!配置代码如下:
app.config["SERVER_NAME"] = "jd.com"
然后在host文件下,加入下方代码
127.0.0.1 cms.jd.com
127.0.0.1 jd.com
打开谷歌浏览器,输入jd.com:5000,点击浏览器icon小图标,就可以看到我们设置的cookie信息了,由于之前我们设置过,我们先把所有cookie信息删除。
删除完!我们再运行主app文件试试!在浏览器输入jd.com:5000,再点击小图标就能看到cookie已成功设置!
主域名已成功设置cookie,我们再看看子域名是否能够获取的到主域名cookie信息!在浏览器输入 cms.jd.com:5000试试
结果返回我们没有获取到name值,这是为什么呢??原因很简单,因为我们再设置cookie的时候,没有指定这个cookie的作用域(说白了,就是指定cookie是否能够在子域名下使用)。既然我们知道了原因,下面我们就设置下cookie的作用域。
set_cookie函数有个domain参数,这个domain参数有什么用呢?其作用就是用于解决cookie是否能够在子域名下使用。代码如下:
respon.set_cookie("name","tlj",domain=".jd.com")
注:设置好后,jd.com主域名下所有的子域名都能使用主域名cookie!
我们先运行jd.com:5000,然后再在浏览器输入cms.jd.com:5000试试,结果如下
OK,这样我们就获取到了主域名cookie信息了。