php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 22.07.2009, 00:23  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard Session Strukturorganisation

Ich will mal wieder eine Allgemeinfrage aufwerfen.

Das Sessionarray ist ja ein begrenzter Namensraum mit konkurrierenden Schlüsseln. Wie organisiert Ihr eigentlich Eure Sessions? Habt Ihr Euch mal die Mühe gemacht, hier Konzepte zu erstellen, vielleicht sogar allgemeingültige Richtlinien? Oder wächst sowas bei Euch immer organisch.

(Fast) spontan fallen mir z.B. folgende Bereich ein, die eine Session abdecken kann:

- persistent: serialisierte Domainobjekte, (Authobjekt)
- dynamic application: Authsettings, Formdaten aus Eingaben über mehrere Seiten
- cached: sonstige serialisierte Daten (e.g. Konfiguration der Applikation)
- global: globale Settings (e.g. aktuelle Page/History, Sprachsetting, Initial-Referrer ...)
- global view: Browserbestimmung, Userstylesheets ...
- dynamic view: Redo für Ajax-Zustände nach Request


Klingt jetzt vielleicht speziell, aber Ihr wisst sicher, worauf ich hinaus will? Hat irgendwer Erfahrungswerte?
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 22.07.2009, 09:56  
Erfahrener Benutzer
 
Benutzerbild von boolean
 
Registriert seit: 06.10.2008
Beiträge: 257
PHP-Kenntnisse:
Fortgeschritten
boolean ist zur Zeit noch ein unbeschriebenes Blatt
boolean eine Nachricht über Skype™ schicken
Standard

Sessions sind ein heikles Thema wenn man beachtet, dass es wirklich nicht einfach ist eine Webseite mit einem Bereich, in dem man sich authentifizieren muss sicher zu halten. Ich stande auch erst vor kurzen vor einem Problem, dass etwas schwer zu lösen war, da es mehrere Fehler serverseitig gegeben hat und diese Fehler nicht ohne weiteres von heute auf morgen behoben worden konnten.

Zu deiner eigentlichen Frage: Ein direktes Konzept habe ich nicht. Ich habe Namensräume noch einmal verschachtelt hierfür nutze ich (meistens) Zend_Session - allerdings gibt es auch hier nachteile.

Ein wesentlicher ist es (so finde ich), dass egal bei welcher Session-Lösung das Problem auftritt: Wenn man beispielsweise einen Loadbalancer mit mehreren Webservern dahinter hat und während eines Laufs wird der Benutzer (entweder versehentlich oder beabsichtigt) auf einen anderen Webserver übertragen so verschwindet die Session was dann wiederrum zur folge hat, dass der Benutzer bspw. seinen Warenkorb oder ähnliches verlieren würde.

Die von dir o.g. Namespaces erscheinen mir für etwas "zu weit ausgedehnt", da es doch so ist, dass diverse Konfigurationen (Userstylesheets oder auch Konfigurationen oder einen teil einer Applikation) nichts in der Session verloren habe. Natürlich - ich geb dir Recht - es ist Ansichtssache und jeder hält andere Sachen für "unschön", was ggf. ein anderer wiederum für gut heißt.

Ich würde jedoch sagen, dass für eine Sessionverwaltung folgende Lösung am besten ist:
Zusätzlich zur eigentlichen Session wird bei aktionen die Session im Cache (Apc, Memcached, File oder Ähnliches gehalten), sofern dieser global aufrufbar ist, was bspw. bei File nicht der Fall sein dürfte.

Weiterhin: Um eine genau Antwort geben zu können auf deine Frage müsstest du schon ein wenig konkreter werden. Modelle gibt es viele - aber die meisten davon bringen nichts, für das eigene Projekt - wie man weis ist jeder anders!

Gruß,

boolean
boolean ist offline   Mit Zitat antworten
Alt 22.07.2009, 10:35  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

Zitat:
Zitat von boolean Beitrag anzeigen
Ein wesentlicher ist es (so finde ich), dass egal bei welcher Session-Lösung das Problem auftritt: Wenn man beispielsweise einen Loadbalancer mit mehreren Webservern dahinter hat und während eines Laufs wird der Benutzer (entweder versehentlich oder beabsichtigt) auf einen anderen Webserver übertragen so verschwindet die Session was dann wiederrum zur folge hat, dass der Benutzer bspw. seinen Warenkorb oder ähnliches verlieren würde.
Das lässt sich über ein eigenes Backend für die Session machen.
Man braucht nur einen zentralen Speicherort (zentraler Server, Memcache, DB (memory-table)) auf den alle Webserver Zugriff haben.
robo47 ist offline   Mit Zitat antworten
Alt 22.07.2009, 10:52  
Erfahrener Benutzer
 
Benutzerbild von boolean
 
Registriert seit: 06.10.2008
Beiträge: 257
PHP-Kenntnisse:
Fortgeschritten
boolean ist zur Zeit noch ein unbeschriebenes Blatt
boolean eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von robo47 Beitrag anzeigen
Das lässt sich über ein eigenes Backend für die Session machen.
Man braucht nur einen zentralen Speicherort (zentraler Server, Memcache, DB (memory-table)) auf den alle Webserver Zugriff haben.
Genauso habe ich es gelöst (Cache).
boolean ist offline   Mit Zitat antworten
Alt 22.07.2009, 15:03  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Naja, ich sag mal so: bei datenbankbasierten Sessions erübrigt es sich natürlich, das eine oder andere Datum nochmal in die Session zu schreiben. Ich will jetzt eigentlich auch keine Diskussion über die Sinnhaltigkeit jedes der genannten Punkte führen. Mir geht es um die eigentliche Frage. Die o.g. Labels sind auch keine Namespaces, ich habe bloss versucht, mögliche Inhalte mal nach Funktion zu klassifizieren.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online   Mit Zitat antworten
Alt 22.07.2009, 16:38  
Erfahrener Benutzer
 
Benutzerbild von boolean
 
Registriert seit: 06.10.2008
Beiträge: 257
PHP-Kenntnisse:
Fortgeschritten
boolean ist zur Zeit noch ein unbeschriebenes Blatt
boolean eine Nachricht über Skype™ schicken
Standard

Also ich habe mich gerade eben für Datenbank-Sessions im aktuellen Projekt entschieden. Auf was möchtest du dann raus?
boolean ist offline   Mit Zitat antworten
Alt 22.07.2009, 17:12  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Auf nichts konkretes, schon gar nicht auf Implementierungsdetails.
Zitat:
Also ich habe mich gerade eben für Datenbank-Sessions im aktuellen Projekt entschieden.
Wenn Du dabei session_set_save_handler benutzt, hast Du ja trotzdem das Problem, dass Daten im $_SESSION Array um die Schlüssel konkurrieren. Hast Du so wenige Daten in der Session, dass das irrelevant ist?

Ich suche Überlegungen zu sinnvollen Sessionstrukturen oder eine Art "Session Design Patterns".
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--

Geändert von nikosch (22.07.2009 um 17:15 Uhr).
nikosch ist gerade online   Mit Zitat antworten
Alt 22.07.2009, 18:30  
yab
Erfahrener Benutzer
 
Registriert seit: 05.04.2009
Beiträge: 291
PHP-Kenntnisse:
Anfänger
yab befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
hast Du ja trotzdem das Problem, dass Daten im $_SESSION Array um die Schlüssel konkurrieren.
...
Ich suche Überlegungen zu sinnvollen Sessionstrukturen oder eine Art "Session Design Patterns".
Das ist doch im Prinzip der Aufbau eines INI-Files. Dort hast du Schlüssel-/Werte-Paare die in Sektionen unterteilt sind. Die Sektionen wären dann deine obige Klassifikation.
Die Konfigurationsklassen mit den Methoden get($Section, $Key) und set($Section, $Key, $Value) kann man doch 1 zu 1 auch für Sessions übernehmen. Ich verstehe jetzt nicht so genau, worauf du hinaus möchtest.
yab ist offline   Mit Zitat antworten
Alt 22.07.2009, 18:32  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Nochmal: Nicht auf die Implementierung, sondern auch die Struktur.

Infiles sind auch nicht vergleichbar, schon weil sie nur max. 2-dimensional verwalten können.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online   Mit Zitat antworten
Alt 22.07.2009, 19:59  
Erfahrener Benutzer
 
Benutzerbild von Celli
 
Registriert seit: 24.05.2009
Beiträge: 158
Celli befindet sich auf einem aufstrebenden Ast
Standard

Ich habe zwar nie Session-Gruppen für unterschiedliche Anwendungsziele erstellt, aber ich denke, dass wenn man es bräuchte, es sich mit Prefixes in den Session-Keys gut organisieren lassen könnte, besonders wenn es Objekt relevante Inhalte sind. Die Lebenszeit der einzelnen Werte oder (virtuelle) Gruppen wäre über eine LifetimeTable in einer der Session Variablen leicht zu verwalten.
__________________
Eine Antwort oder Lösung habe ich nicht immer, aber zu 99,9% eine Idee. (200 Posts Limit)
Celli ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
SessionHandler - Sessions in einer Datenbank #Avedo Software-Design 11 04.05.2009 15:44
[Erledigt] Problem mit der übergabe einer Session ID Shinak PHP Tipps 2009 12 13.03.2009 14:30
Session nofear87 PHP Tipps 2008 8 05.11.2008 10:42
[Erledigt] Session Problem karina_02 PHP Tipps 2008 6 18.05.2008 22:37
Problem bei session Lifetime Cyberbob_at_tot PHP Tipps 2007 5 05.06.2007 17:47
Session in Session tinchen PHP Tipps 2007 22 21.03.2007 19:53
session nach seitenwechsel leer... GELight PHP Tipps 2006 8 17.09.2006 15:17
Session Logout Login Navigation TailerD PHP Tipps 2006 10 24.06.2006 17:12
[Erledigt] php session problem :( PHP Tipps 2005-2 5 21.10.2005 16:37
Klassenobjekt in ner Session speichern?! Finkman PHP Tipps 2005-2 5 09.08.2005 00:38
Session wird nicht angelegt PHP Tipps 2005-2 7 24.07.2005 13:35
Kreieren einer Session PHP Tipps 2005 11 28.05.2005 15:16
Session Problem PHP-Fortgeschrittene 3 18.02.2005 14:37
[Erledigt] Formulardaten in einer Session speichern, per Link übergeben PHP Tipps 2004-2 2 29.12.2004 15:47
[Erledigt] Hilfe...PhpBB Session Problem!! PHP Tipps 2004-2 2 15.12.2004 18:28

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php session logout history cache

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:34 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum