php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #16 (permalink)  
Alt 18-06-2009, 22:10
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Zitat von deedee Beitrag anzeigen
Warum weißt du, dass du es nicht bräuchtest?
Weil ich 3. mit Ja beantworte.

Ein Session Handler ist ein Session Handler. Wenn ich Serialisierung brauche, implementiere ich die "darüber". So bleibt der Handler austauschbar.

Geändert von onemorenerd (18-06-2009 um 22:12 Uhr)
Mit Zitat antworten
  #17 (permalink)  
Alt 18-06-2009, 22:11
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Das ist doch wohl deine Sorge:
Zitat:
Mein aktueller Session-Handler arbeitet mit Dateien. Damit keine race-conditions stören, mache ich vor dem session_start immer einen LOCK auf eine Dummy-Datei. Das ist natürlich gar nicht toll. Bremst eine Webseite sicherlich ziemlich aus. Darum suche ich jetzt eine Alternative.
Warum bremst da irgend was aus?
Warum willst du überhaupt locken?

Mein Vorschlag:
Speichere die ganzen Dateien in einem Temp Ordner.
Per Cron oder so löscht du regelmäßig alle Dateien älter 4 H
__________________
Wir werden alle sterben

Geändert von combie (18-06-2009 um 22:15 Uhr)
Mit Zitat antworten
  #18 (permalink)  
Alt 18-06-2009, 22:17
deedee
 Registrierter Benutzer
Links : Onlinestatus : deedee ist offline
Registriert seit: Jun 2009
Beiträge: 80
deedee befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Wenn ich Serialisierung brauche
Wie kommst du jetzt auf das Thema Serialisierung? Mit gehts hier jetzt um Locks.
Zitat:
Warum bremst da irgend was aus?
Bei der Datei-Session-Handler-Variante:
Wenn ich eine Dummy-Datei verwende, auf die ich immer einen Lock mache vor dem session_start, dann blockiere ich automatisch alle anderen Prozesse, die das auch machen wollen.

Bei der DB-Session-Handler-Variante:
Zumindest jede Member-Seite hat ein session_start. Wenn ich jetzt im Session-Handler (oder davor) einen table-lock auf die session-DB-Tabelle mache, müssen sich alle anderen Prozesse hinten anstellen. Bei row-level-locking könnte ich ein locking auf die User-spezifische Session-ID machen. Das würde dann andere User nicht aufhalten.

Cronjob-Variante:
Ist sicher eine mögliche Variante. Aber ich würde halt auch gerne lernen, wie man es mit einem Session-Handler macht.

Geändert von deedee (18-06-2009 um 22:23 Uhr)
Mit Zitat antworten
  #19 (permalink)  
Alt 18-06-2009, 22:19
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Zitat von deedee Beitrag anzeigen
Wie kommst du jetzt auf das Thema Serialisierung? Mit gehts hier jetzt um Locks.
Wozu lockst du denn bitte wenn nicht um serialisierten Zugriff zu garantieren? Nur so aus Spass?
Mit Zitat antworten
  #20 (permalink)  
Alt 18-06-2009, 22:25
deedee
 Registrierter Benutzer
Links : Onlinestatus : deedee ist offline
Registriert seit: Jun 2009
Beiträge: 80
deedee befindet sich auf einem aufstrebenden Ast
Standard

Hm. Verstehe ich jetzt nicht. Um die Serialisierung muss ich mich bei einem Session-Handler doch nie kümmern. Das passiert doch immer alles automatisch im Hintergrund.

Mir gehts nicht darum, schnell schnell irgendeine Lösung zu haben. Mir gehts darum zu lernen

Geändert von deedee (18-06-2009 um 22:28 Uhr)
Mit Zitat antworten
  #21 (permalink)  
Alt 18-06-2009, 22:30
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
Aber ich würde halt auch gerne lernen, wie man es mit einem Session-Handler macht.
Der ist für sowas wenig geeignet! Du lernst also das falsche.
(meine bescheidene Ansicht)

Zitat:
Wenn ich eine Dummy-Datei verwende, auf die ich immer einen Lock mache vor dem session_start, dann blockiere ich automatisch alle anderen Prozesse, die das auch machen wollen.
Die können testen, ob sie dem Lock machen können, und andernfalls einfach ohne Zeitverlust dran vorbei laufen.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #22 (permalink)  
Alt 18-06-2009, 22:34
deedee
 Registrierter Benutzer
Links : Onlinestatus : deedee ist offline
Registriert seit: Jun 2009
Beiträge: 80
deedee befindet sich auf einem aufstrebenden Ast
Standard

Wenn es ihnen möglich wäre daran vorbeizulaufen, würde ich doch wieder race-conditions ermöglichen, oder?
Mit Zitat antworten
  #23 (permalink)  
Alt 18-06-2009, 22:38
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
würde ich doch wieder race-conditions ermöglichen, oder?
???
Ein Prozess lockt und löscht Dateien, alle anderen laufen unbeschadet dran vorbei! Versuchen gar nicht zu löschen!
__________________
Wir werden alle sterben
Mit Zitat antworten
  #24 (permalink)  
Alt 18-06-2009, 22:41
deedee
 Registrierter Benutzer
Links : Onlinestatus : deedee ist offline
Registriert seit: Jun 2009
Beiträge: 80
deedee befindet sich auf einem aufstrebenden Ast
Standard

Wie soll man denn dem Session-Handler klar machen, dass keine der 6 Funktionen abgearbeitet werden dürfen, wenn der Interpreter nicht locken kann und deshalb am lock vorbeiläuft?
Mit Zitat antworten
  #25 (permalink)  
Alt 18-06-2009, 22:48
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Was willst du auch dem SessionHandler Aufgaben aufdrücken, mit denen er nichts zu tun haben sollte!

Benutzt du einen Hammer um eine Schraube ins Gewinde zu drehen?
Fährst du mit einem Bagger in Urlaub?
Isst du deine Schuhe?
__________________
Wir werden alle sterben

Geändert von combie (18-06-2009 um 22:51 Uhr)
Mit Zitat antworten
  #26 (permalink)  
Alt 18-06-2009, 22:49
deedee
 Registrierter Benutzer
Links : Onlinestatus : deedee ist offline
Registriert seit: Jun 2009
Beiträge: 80
deedee befindet sich auf einem aufstrebenden Ast
Standard

Nichts gegen meine Schuhe! Paniert schmecken die total lecker! *lach*
MIST! Jetzt hats mir grad nen Zahn total zerrissen. Das war die Strafe für den Lacher.

Geändert von deedee (18-06-2009 um 23:15 Uhr)
Mit Zitat antworten
  #27 (permalink)  
Alt 18-06-2009, 23:20
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Zitat von deedee Beitrag anzeigen
Hm. Verstehe ich jetzt nicht. Um die Serialisierung muss ich mich bei einem Session-Handler doch nie kümmern. Das passiert doch immer alles automatisch im Hintergrund.
Automatisch passiert gar nichts. Wenn du dich nicht um die Serialisierung kümmerst, dann gibt es keine.

Was willst du eigentlich? Du willst keine Race Conditions, kein Lost Update, kein Inconsistent Read ... richtig?
Nun, genau das ist Serialisierung.

Nachtrag: Gerade fällt mir auf, dass hier vielleicht ein Missverständnis vorliegt. Ich rede nicht von serialize()!
Mit Zitat antworten
  #28 (permalink)  
Alt 18-06-2009, 23:31
deedee
 Registrierter Benutzer
Links : Onlinestatus : deedee ist offline
Registriert seit: Jun 2009
Beiträge: 80
deedee befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Was willst du eigentlich? Du willst keine Race Conditions, kein Lost Update, kein Inconsistent Read ... richtig?
Nun, genau das ist Serialisierung.
Ich glaube, ich verstehe, was du meinst. War schon ziemlich verwirrend. Vor allem in Zusammenhang mit Sessions, wo die Daten alle serialisiert abgespeichert werden. Aber ja, genau das, was du hier meinst, das meine ich auch.
Zitat:
Wenn ich Serialisierung brauche, implementiere ich die "darüber"
Soviel ich weiß, muss zuerst der Session-Handler definiert werden, bevor session_start aufgerufen werden kann. Ich glaube, das wäre unnötig aufwändig, wenn ich schon vor dem Session-Handler die Session-ID aus dem Session-Cookie holen und darauf dann einen row-level-lock machen würde. Da ist es viel einfacher, sich die ID in der read-Funktion des Session-Handlers automatisch übergeben zu lassen.

Allerdings könnte man dann die Reihenfolge umdrehen, wenn man den row-lock außerhalb des Session-Handlers vornimmt. Also zuerst den row-level-lock und danach ev. irgendwelche table-locks. Dann wäre das Problem wohl gelöst. Aber glücklich wäre ich mit dieser Variante nicht, sofern ich die überhaupt hinbekomme. Muss ich mal ne Nacht drüber schlafen.

Geändert von deedee (19-06-2009 um 00:13 Uhr)
Mit Zitat antworten
  #29 (permalink)  
Alt 19-06-2009, 00:38
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

"Darüber" heißt für mich, dass ich mich überhaupt nicht um das Locking von Sessiondaten kümmere. Ich entwerfe die Applikation so, dass ich das nicht brauche.

Mal ein Beispiel: Formular zum Bearbeiten eines Benutzerprofils.
User loggt sich ein, Session wird gestartet. User sendet Request für das Formular. Ich prüfe vor der Ausgabe, ob er eingeloggt ist. Ist er. Ich gebe das Formular aus, vorgefüllt mit seinen Profildaten.
Während ich die Ausgabe zusammenbaue, kann sich der User durch einen zweiten Request (anderes Tab) ausloggen. Das ist mir völlig egal. Ich zeige das Formular dennoch an.
Schickt der User das Formular ab, prüfe ich wieder, ob er noch eingeloggt ist. Ist er es nicht, gibt es eine Fehlermeldung. Ist er noch eingeloggt, verarbeite ich die Formulardaten. Loggt er sich während dessen aus, ist mir das wieder egal. Denn er war in der Sekunde eingeloggt, als er abgeschickt hat. Nur das zählt für mich.

In diesem Beispiel wird also immer nur einmal die Session geprüft und das Ergebnis zählt bis zum Ende des Requests. No matter what.

Das klappt so wunderbar, weil die Formulardaten nicht in die Session geschrieben werden. Aber auch das kann man handeln. Nehmen wir mal an es wäre ein mehrschrittiges Formular. User loggt sich ein, lädt die Form, füllt aus, schickt ab. Bisher alles wie gehabt. Doch nun werden die Daten noch nicht verarbeitet (z.B. in die DB geschrieben) sondern in der Session abgelegt und der zweite Teil des Formulars angezeigt. Das passiert alles in Prozess A und es passiert auf jeden Fall. Hat der User sich kurz nach der Prüfung ausgeloggt, fand das in Prozess B statt. Die GC hat die Sessiondaten vielleicht sogar schon weggeworfen. Aber am Ende von A wird $_SESSION wieder rausgeschrieben. Das Ausloggen hat damit quasi nie stattgefunden. Das ist ein Lost Update, aber eines das ich bewußt in Kauf nehme. Ich hätte mich anders entscheiden können - Ausloggen darf nicht übersehen werden. In diesem Fall hätte ich kurz vor der Ausgabe den Login-Status erneut geprüft.

Wie man sieht kümmere ich mich in keinster Weise darum, dass die Session-benutzenden Threads schon in Reihe ablaufen.
Das würde auch nur bedingt etwas bringen, denn "in der Leitung" können sich die Requests immer noch überholen. Das selbe gilt übrigens auch für DB-Anfragen. Kein mir bekanntes DBS garantiert, dass Queries in der Reihenfolge ausgeführt werden, in der sie dem DBS übergeben werden.

Geändert von onemorenerd (19-06-2009 um 00:43 Uhr)
Mit Zitat antworten
  #30 (permalink)  
Alt 19-06-2009, 10:39
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

OffTopic:
Ist ja lustig, wie dieser deedee euch mit seinen Schnapsideen auf Trap hält. Spätestens nach seinem 3. Posts wäre ich nicht mehr drauf eingegangen
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
session automatischer logoff bevor die session ausläuft wirkungsquantum BRAINSTORMING PHP/SQL/HTML/JS/CSS 3 18-04-2007 15:35
IIS6 + WServer 2003 + Session + immer andere Session ID ringintegral Fragen zu Installation & Konfiguration (LAMP, WAMP & Co.) 3 19-10-2005 06:17
Überprüfen ob Session vorhanden, wenn nicht Session anlegen st@tic PHP Developer Forum 28 13-07-2005 14:56
Session & setting session.bug_compat_42 tsaenger PHP Developer Forum 3 24-02-2005 18:14
Smarty, session.use_trans_sid und keine Session-ID im Link mrhappiness PHP Developer Forum 4 09-08-2004 13:34

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:28 Uhr.