我已经使用flask建立了一个网站(www.csppdb.com)。有时,当我以一个用户身份登录时,先注销,然后以另一个用户身份登录,我仍然会看到以第一个用户身份登录的页面。刷新页面后,立即解决此问题。如果我没记错的话,我认为这被称为“缓存”。有什么办法可以在站点范围内禁用此功能,以便访问的每个页面都需要重新刷新?
这就像与朋友共享您的计算机。他登录Facebook,然后注销。现在,您登录他的计算机,然后看到他的个人资料…(尴尬)。刷新页面后,问题已解决。
这是我的一些代码。我当时使用flask-login,但随后尝试“自己滚动”
from flask.ext.mysql import MySQL
import os
from flask import Flask, request, jsonify, session, url_for, redirect, \
render_template, g, flash
from data import *
from werkzeug import check_password_hash, generate_password_hash
import config
app = Flask(__name__)
mysql = MySQL()
app.config['MYSQL_DATABASE_HOST'] = os.environ['MYSQL_DATABASE_HOST'] if 'MYSQL_DATABASE_HOST' in os.environ else config.MYSQL_DATABASE_HOST
app.config['MYSQL_DATABASE_PORT'] = os.environ['MYSQL_DATABASE_PORT'] if 'MYSQL_DATABASE_PORT' in os.environ else config.MYSQL_DATABASE_PORT
app.config['MYSQL_DATABASE_USER'] = os.environ['MYSQL_DATABASE_USER'] if 'MYSQL_DATABASE_USER' in os.environ else config.MYSQL_DATABASE_USER
app.config['MYSQL_DATABASE_PASSWORD'] = os.environ['MYSQL_DATABASE_PASSWORD'] if 'MYSQL_DATABASE_PASSWORD' in os.environ else config.MYSQL_DATABASE_PASSWORD
app.config['MYSQL_DATABASE_DB'] = os.environ['MYSQL_DATABASE_DB'] if 'MYSQL_DATABASE_DB' in os.environ else config.MYSQL_DATABASE_DB
mysql.init_app(app)
if 'SECRET_KEY' in os.environ: app.config['SECRET_KEY'] = os.environ['SECRET_KEY']
else: app.config['SECRET_KEY'] = os.urandom(24)
def connect_db(): return mysql.connect()
def check_auth():
g.user = None
if 'username' in session:
g.user = get_user(session['username'])
return
return redirect(url_for('login'))
@app.route('/')
def home():
if 'username' in session: return redirect(url_for('main'))
return render_template('home.html')
def connect_db(): return mysql.connect()
@app.teardown_request
def teardown_request(exception):
if exception: print exception
g.db.close()
@app.before_request
def before_request():
print session.keys(), session.values()
print("before request")
print ('username' in session, "in session?")
g.db = connect_db()
g.user = None
if "username" in session:
g.user = get_user(session['username'])
@app.route('/login/', methods=['GET', 'POST'])
def login():
"""Logs the user in."""
if 'username' in session:
return redirect(url_for('main'))
error = None
if request.method == 'POST':
print("login hit")
user = get_user(request.form['username'])
if user is None:
error = 'Invalid username'
print error
elif not check_password_hash(user.password, request.form['password']):
error = 'Invalid password'
print error
else:
flash('You were logged in')
print "logged in"
session['username'] = request.form['username']
g.user = request.form['username']
print error, "error"
return redirect(url_for('main'))
return render_template('login.html', error=error)
将缓存设置为max-age = 0可以修复它。
@app.after_request
def add_header(response):
"""
Add headers to both force latest IE rendering engine or Chrome Frame,
and also to cache the rendered page for 10 minutes.
"""
response.headers['X-UA-Compatible'] = 'IE=Edge,chrome=1'
response.headers['Cache-Control'] = 'public, max-age=0'
return response
我有一个使用assetic的Symfony2应用程序。一切都很好,只是在localhost中,浏览器不会缓存我的资产。 任何想法,为什么以下资产没有得到缓存响应304和毫秒,而是与200响应,需要大约15秒... 响应头 Accep-Ranges bytes Cache-Control max-age=604800 Connection Keve-Alive Content-Encode gzip
问题内容: 早上好,我在生产环境中有一个Web应用程序。用户每天都在使用它,当我发布更新时,用户回到该Web应用程序时,他会查看该Web应用程序的旧版本。他需要刷新浏览器以加载新版本。我怎么解决这个问题?我每次发布更新时(每周3-4次)都无法告诉数百名用户刷新页面。 问题答案: 一个简单的解决方案是将 代表时间戳或会话ID的查询字符串 添加到文件中。 例如,在我们的春季应用中,我们只需使用: 您也
推荐: http://www.cnblogs.com/skynet/archive/2012/11/28/2792503.html 304 Not Modified
日期:1998年10月30日星期五格林尼治时间13:19:41 服务器:Apache/1.3.3(Unix) 缓存控制:max-age=3600,必须重新验证 有效期:1998年10月30日星期五格林尼治时间14:19:41 最后修改:1998年6月29日星期一02:28:12格林尼治时间 ETAG:“3E86-410-3596FBBC”
问题内容: 有关CSS和浏览器的快速问题。我尝试搜索SO,发现了一些类似的帖子,但没有确定的内容。 我在网络项目中使用了一个或两个CSS文件。这些在我的网页的标题中引用。一旦我点击了我的页面之一,是否会缓存CSS,以便不随每个请求重新下载CSS?希望如此。IE,Firefox和Safari处理不同吗?如果浏览器已关闭,那么在打开新的浏览器实例时,首次访问CSS是否会刷新? 问题答案: 您的文件 可
我尝试使用ETAG从api请求缓存json响应。我调用类似http://localhost:3000/api/config的代码,并获取: Thx响应。