La variable de sesión del matraz no persiste entre solicitudes

Usando la aplicación a continuación y Flask 0.11.1, navegué a las rutas asociadas con las siguientes llamadas de función, con los resultados dados:

  • create (): ‘1,2,3’ # OK
  • eliminar (1): ‘2,3’ # OK
  • eliminar (2): ‘1,3’ # esperado ‘3’
  • mantener (): ‘1,2,3’ # esperado ‘1,3’ o ‘3’

from flask import Flask, session app = Flask(__name__) @app.route('/') def create(): session['list'] = ['1','2','3'] return ",".join(session['list']) @app.route('/m') def maintain(): return ",".join(session['list']) @app.route('/r/') def remove(id): session['list'].remove(str(id)) return ",".join(session['list']) if __name__ == '__main__': app.secret_key = "123" app.run() 

Esta pregunta es similar en el tema a esta pregunta , esta y esta , pero estoy configurando la clave secreta y no la estoy regenerando, y mi variable no es más grande que los 4096 bytes permitidos para las cookies. Tal vez me esté perdiendo un poco más de comprensión básica sobre las variables de sesión de Flask?

Flask usa un CallbackDict para rastrear las modificaciones a las sesiones.

Solo registrará modificaciones cuando configure o borre una clave. Aquí, modificas los valores en lugar, que no detectará. Prueba esto:

 @app.route('/r/') def remove(id): val = session['list'] val.remove(str(id)) session['list'] = val return ",".join(session['list']) 

… y lo mismo con otros cambios, o puede intentar configurar session.modified = True lugar de desencadenar la detección.

Desde el doc :

Tenga en cuenta que las modificaciones en las estructuras mutables no se detectan automáticamente, en esa situación debe establecer explícitamente el [atributo modified ] en True .

Tratar:

 session['list'].remove(str(id)) session.modified = True