2012-12-07 28 views
16

में ब्राउज़र कैशिंग समस्याएं मैंने फ्लास्क (www.csppdb.com) का उपयोग कर एक वेबसाइट बनाई है। कभी-कभी जब मैं एक उपयोगकर्ता के रूप में लॉग इन करता हूं, लॉग आउट करता हूं, तो किसी अन्य उपयोगकर्ता के रूप में लॉगिन करता हूं, फिर भी मैं पहले उपयोगकर्ता से लॉग इन करता हूं। पेज को रीफ्रेश होने पर यह समस्या तुरंत ठीक हो जाती है। मुझे लगता है कि अगर मुझे गलत नहीं लगता है तो इसे "कैशिंग" कहा जाता है। क्या कोई तरीका है कि मैं इसे साइट के व्यापक स्तर पर अक्षम कर सकता हूं ताकि प्रत्येक पृष्ठ को देखने के लिए एक नया ताज़ा करने की आवश्यकता हो?फ्लास्क

यह आपके कंप्यूटर को एक दोस्त के साथ साझा करना होगा। वह फेसबुक में लॉग इन करता है, फिर लॉग आउट करता है। अब आप अपने कंप्यूटर पर लॉग इन करते हैं और आप उसकी प्रोफ़ाइल देखते हैं ... (अजीब)। पृष्ठ को रीफ्रेश करने के बाद समस्या ठीक हो जाती है।

यहां मेरा कुछ कोड है। मैं कुप्पी प्रवेश का उपयोग कर रहा था, लेकिन मैं तो पृष्ठों आप कुछ HTTP प्रतिक्रिया हेडर निर्धारित करने की आवश्यकता के इन प्रकार पर ब्राउज़र कैशिंग

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) 
+0

आप किस लेख का उपयोग करते हैं? –

+1

कोई भी आप कुछ भी नहीं कह इससे पहले कि आप यहाँ उदाहरण लॉगिन करने के लिए किसी भी कोड नहीं डाल सकते हैं, और टेम्पलेट के विचारों और उदाहरण लॉगआउट जहां इस बग कर सकते हैं। – Denis

+0

@Denis, कृपया संलग्न कोड –

उत्तर

21

जोड़ने के बारे में कैश की स्थापना होने के लिए अधिकतम उम्र से पता चलता है कि छोड़ देंगे न = 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 
+0

http पता चलता है कि शामिल करने के लिए: // भी इस मदद arusahni.net/blog/2014/03/flask-nocache.html – tyan

2

को रोकने के लिए "मेरे अपने रोल" की कोशिश की।

Cache-Control: no-cache, no-store 
Pragma: no-cache 

एक बार जब आप ऐसा करते हैं तो ब्राउज़र अभ्यस्त उन पृष्ठों को कैश। मुझे पता है कि "कुप्पी" के साथ ऐसा करना तो मैं आप के लिए एक व्यायाम :)

यह सवाल एक प्रतिक्रिया हेडर Flask/Werkzeug how to attach HTTP content-length header to file download

+0

खेद है कि मैं न पालन – cowls

+0

इसमें http हैडर सर्वर – cowls

+0

@Dave अद्यतन जवाब से http जवाब में स्थापित किया जाना चाहिए एक सवाल प्रतिक्रिया हेडर को जोड़ने का तरीका – cowls