Application-Objekt

chironex

Erfahrenes Mitglied
Hallo Leute,

ich habe in einer meiner Webanwendungen applikationsweite Informationen (Berechtigungsinfos) im Application-Objekt gespeichert.Um Probleme mit Gleichzeitigkeiten zu verhindern habe ich zusätzlich einen Mutex eingebaut. Damit ich erkennen kann, ob die Informationen seit dem letzten Mal geändert wurde habe ich einen Timestamp eingebaut, der den Änderungszeitpunkt markiert.

Prinzipiell funktionierts eh spitze, aber ich habe ein kleines Problem: Die unterschiedlichen Sessions bekommen den geänderten Timestamp nicht sofort mit. Programmtechnisch glaube ich nicht wirklich, dass ein Fehler vorliegt, ich habe den Code mehrfach durchgetraced. (Hundertprozentig ausschließen kann ichs aber auch nicht) Außerdem sehe ich den Timestamp in einer Session richtig, und in der anderen falsch. Habt Ihr Erfahrung mit dem Application-Objekt und ähnlichen Problemen?
 
Hallo,

soweit ich weiss lutscht er sich die Inhalte für das Applikation Objekt am Beginn der Session... (das gilt zumindest für die Inhalte der config)

Das bedeutet, dass eine laufende Session die Änderung des Zeitstempels nicht mitbekommt und auch nicht mitbekommen kann.

Das lässt sich ja einfach testen, ob das der Fall ist. Ansonsten würde ich eine Lösung über einen Festspeicher vorziehen...Speichern in der Datenbank oder in einem File. Das macht die gepeicherten Inhalte sicher, auch wenn das System mal aussteigt (serverseitg) und es ist auch eine Historie denkbar und möglich.

Vielleicht hilfts!
Gruß
Alex
 
Also mit den Inhalten der Config hab ichs nicht probiert, dort kann es durchaus sein, dass die Inhalte nur zu Beginn gezogen werden, was ja auch ok ist.

Das Application Objekt bringt generell schon einen Zugriff auf die aktuellen Daten, ähnlich wie das Session Objekt, nur halt für die gesamte Applikation. Und wenn Du dort den gemeinsamen Zugriff mit Mutex regulierst, funktioniert das in der Regel auch wunderbar.
Bei mir sieht das ganze so aus: Im App-Objekt liegen die Berechtigungsdaten. Jede Änderung trage ich in der DB ein und lade dann die Daten neu in die Applikation. Wenn ein User eine Berechtigungsanfrage macht, sieht er nach, ob die Daten verändert wurden. Wenn ja, dann lädt er nur die für ihn relevanten Daten in ein Session Objekt (das sind dann nur recht wenige) um mit den geänderten Informationen die Abfrage zu machen.

Beim Timestamp habe ich einen kleinen Fehler mit großer Auswirkung gemacht. Ich benutze nämlich innerhalb meiner Session noch ein eigenes Cache, das mehrmalige Berechtigungsanfragen (wie sie meist vorkommen) auf den gleichen Bereich beschleunigt.

Sorry, dass ich die Angelegenheit nicht auf "erledigt" gesetzt habe. Hab an diesen Therad nicht mehr gedacht, da auch recht lang niemand geantwortet hat. Wie meist bei meinen Threads ;-)
 
Zurück