¿Por qué funciona la cookie de sesión cuando se sirve desde un dominio pero no cuando se usa una IP?

Tengo una aplicación Flask con sesiones que funciona bien en mi máquina de desarrollo local. Sin embargo, cuando trato de implementarlo en un servidor de Amazon, las sesiones no parecen funcionar.

Más específicamente, la cookie de sesión no está configurada. Sin embargo, puedo establecer cookies normales. Me aseguré de tener una clave segura estática, ya que otros han indicado que podría ser un problema. La única diferencia está en cómo se configura el servidor. Durante el desarrollo, uso

app.run()

para correr localmente. Cuando se implementa, uso

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

Sospecho que el problema podría estar en lo anterior, pero no estoy completamente seguro.

La sesiónhace parece funcionar en Firefox, pero no en Chrome.

La siguiente aplicación pequeña muestra el problema, con las diferencias de configuración en la parte inferior:

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)

Respuestas a la pregunta(3)

Su respuesta a la pregunta