增加 Flask 中的 cookie 值

Increment the cookie value in Flask

我想统计页面的访问次数。下面是相同的代码。当我 运行 代码时,它不会设置 'visit_count' cookie 和 '/visit' returns 'None' 值。有什么问题?

from flask.helpers import make_response
app = Flask(__name__)

@app.route('/', methods=['GET','POST'])
def show_page():
    return render_template('cookiecounter.html')

@app.route('/setcookie', methods=['GET','POST'])
def setcookie():
    resp = make_response('Welcome to our site!')
    resp.set_cookie('user_visit',str(1), max_age=5*60*60)
    return resp
   
@app.route('/visit', methods=['GET','POST'])  
def visit():
    vc=request.cookies.get('user_visit')
    if vc==1:
        return 'You are visiting for the first time'
    else:
        vscount=int(vc)+1
        resp1 = make_response('new visit')
        resp1.set_cookie('visit_count',str(vscount), max_age=5*60*60)
        inc_count=request.cookies.get('visit_count')
        return str(inc_count)

if __name__=="__main__":
 app.run(debug=True) 

发生了一些导致意外结果的事情。

resp1.set_cookie('visit_count',str(vscount), max_age=5*60*60)

当您这样做时,您实际上并没有设置 cookie 的值,只是准备响应,以便在客户端收到您的响应后设置 cookie。

inc_count=request.cookies.get('visit_count')

由于前面的语句实际上没有设置任何 cookie,这实际上是在检索与您第一次调用它时相同的值,即旧值。

return str(inc_count)

还记得您是如何设置响应以便在客户端设置 cookie 的吗?由于您没有返回该响应,因此永远不会设置更新的 cookie,您只剩下旧的(在您的情况下根本没有 cookie)。另外,您还返回了旧值,因为您在之前的行中检索到了它。

另一件事是您正在检查包含字符串“1”和数字 1 的变量之间的相等性,这可能不是您想要做的。

我不确定您为什么使用两个不同的 cookie user_visitvisit_count

from flask.helpers import make_response
from flask import Flask, request
app = Flask(__name__)

@app.route('/visit', methods=['GET','POST'])  
def visit():
    vc=request.cookies.get('user_visit', "1")
    
    resp = make_response(f"This is visit number {int(vc)}")
    vscount=int(vc)+1
    resp.set_cookie('user_visit',str(vscount), max_age=5*60*60)
    return resp

这可能接近您想要实现的目标。

Python 快乐