Eine Ebene höher
Frage
Was ist beim Programmieren mit Zope Sessions zu beachten?
Antwort
- In Zope Sessions sollte man im i.A. nur Daten von elementaren Python Basistypen (string, int, list, dict, etc) oder Instanzen von Python-Klassen speichern.
- Persistente Objekte können nicht in einer Session gespeichert werden. Persistente Objekte referenziert man alternativ am besten über den Pfad (getPhysicalPath() abspeichern und das Objekt später via restrictedTraverse() anziehen)
- Bei der Speicherung von veränderbaren (mutable) Datentypen (wie dict oder list) muss darauf geachtet werden,
dass bei einer Änderung (z.B. list.append(), somedict[key] = value) die Werte nur per-thread übernommen werden und
nicht persistent gespeichert werden.
Lösung 1:
context.REQUEST.SESSION._p_changed = 1 setzenLösung 2:
Das geänderte Objekt der Session neu zuweisen: S = context.REQUEST.SESSION temp_dict = S['mydict'] temp_dict[newkey] = newvalue S['mydict'] = temp_dict