Warum funktioniert das Sitzungscookie beim Serving von einer Domain, aber nicht bei Verwendung einer IP-Adresse?

Ich habe eine Flask-Anwendung mit Sitzungen, die auf meinem lokalen Entwicklungscomputer gut funktioniert. Wenn ich jedoch versuche, es auf einem Amazon-Server bereitzustellen, scheinen die Sitzungen nicht zu funktionieren.

Insbesondere wird das Sitzungscookie nicht gesetzt. Ich kann jedoch normale Cookies setzen. Ich habe sichergestellt, dass ich einen statischen Sicherheitsschlüssel habe, da andere darauf hingewiesen haben, dass dies ein Problem sein könnte. Der einzige Unterschied besteht darin, wie der Server eingerichtet ist. Während der Entwicklung benutze ich

app.run()

lokal ausführen. Bei der Bereitstellung verwende ich

app.config['SERVER_NAME'] = '12.34.56.78'  # <-- insert a "real" IP
app.run(host='0.0.0.0', port=80)

Ich vermute, das Problem könnte in den oben genannten sein, bin aber nicht ganz sicher.

Die Sitzung does scheint in Firefox zu funktionieren, aber nicht in Chrome.

Die folgende kleine Anwendung zeigt das Problem mit den Konfigurationsunterschieden unten:

from flask import Flask, make_response, request, session

app = Flask(__name__)
app.secret_key = 'secretKey'

# this is to verify that cookies can be set
@app.route('/setcookie')
def set_cookie():
    response = make_response('Cookie set')
    response.set_cookie('cookie name', 'cookie value')
    return response

@app.route('/getcookie')
def get_cookie():
    if 'cookie name' in request.cookies:
        return 'Cookie found. Its value is %s.' % request.cookies['cookie name']
    else:
       return 'Cookie not found'

# this is to check if sessions work
@app.route('/setsession')
def set_session():
    session['session name'] = 'session value'
    return 'Session set'

@app.route('/getsession')
def get_session():
    if 'session name' in session:
        return 'Session value is %s.' % session['session name']
    else:
        return 'Session value not found'

if __name__ == '__main__':
    app.debug = True

    # windows, local development
    #app.run()  

    # Ubuntu
    app.config['SERVER_NAME'] = '12.34.56.78'  # <-- insert a "real" IP
    app.run(host='0.0.0.0', port=80)

Antworten auf die Frage(6)

Ihre Antwort auf die Frage