kostenloser Webspace werbefrei: lima-city


Datenbankbasiertes Sessionsystem

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    minis-isp

    minis-isp hat kostenlosen Webspace.

    Halllo zusammen,

    Nachdem ich nun seit einigen Tagen versuche, mir ein Datenbankbasiertes Sessionsystem mit PHP einzurichten und immer wieder auf Fehlschläge stoße, hoffe ich hier nun Hilfe zu finden.

    Angefangen habe ich mit dem Buch PHP 5.4 und MySQL 5.5.
    Dort ist das ganze ja schön anschaulich erklärt, funktioniert leider nur nicht ganz so einfach, da mein Server noch kein PHP 5.4 unterstützt.
    Dann habe ich mir als letztes von folgendem Tutorial Inspirationen geholt.
    http://www.der-webdesigner.net/php/tutorials/330-php-und-oop-datenbank-basiertes-session-management

    Ich habe versucht, den Quelltext anzupassen, nachdem auch dies wieder ein Fehlschlag produzierte habe ich einfach mal zu Testzwecken den dort aufgeführten Quelltext kopiert.

    Normalerweise sollte ja, wenn ich aus der _write() - Methode am Anfang die Prüfung auf die Variable $sess_data weglasse, automatisch eine leere Session in die Datenbank geschrieben werden.
    Wenn ich anschließend die Klasse in meiner Hauptdatei instantiiere und ein paar $_SESSION - Variablen anlege, müssten doch auch in der Datenbank Einträge vorliegen?! Leider tritt auch dann der Fall nicht ein.

    Zum Testen vom oben verlinkten Tutorial verwendete ich XAMPP mit der PHP - Version 5.3.8,
    zum Testen der Beispiele aus o. g. Buch verwendete ich XAMPP mit der PHP - Version 5.4 auf einem anderen Rechner.

    Vielleicht hat ja jemand eine Idee und kann mir weiterhelfen! ;-)

    Danke & frohes neues Jahr,
    Minis-Isp
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. man kan dir vor allem dann helfen - und zwar gerne :) - wenn du hier fehlermeldungen postest. ohne geht die sache schon sehr schwer. du solltest in deinem code ganz am anfang
    error_reporting(E_ALL | E_STRICT);
    einbinden. dass das funzt, solltest auch dein php.ini bearbeiten (standardmäßig werden keine meldungen ausgegeben). und dann, wenn du php-meldungen/-fehler hast solltest die hier posten.
    sonst alles gute ;)
  4. Autor dieses Themas

    minis-isp

    minis-isp hat kostenlosen Webspace.

    Hallo,

    error_reporting Steht in php.ini und im Skript selbst auf E_ALL | E_STRICT.
    Fehlermeldungen bekomme ich jedoch keine zurück, das ist ja das Problem.

    Es werden zwar Sessions erstellt, die sich anschließend auslesen lassen, allerdings tauchen sie nicht in der Datenbank auf, das ist es, was mich ärgert.

    Nach jedem Ausführen und Absenden eines SQL - Kommandos prüfe ich auch "manuell" nochmal auf Erfolg und lasse mir im Falle eines Misserfolges eine Fehlermeldung anzeigen.

    Leider zeigt eben nichts, aber wirklich garnichts eine Fehlermeldung an... :-(
  5. minis-isp schrieb:
    ... Leider zeigt eben nichts, aber wirklich garnichts eine Fehlermeldung an... :-(
    yo mey! dann fehlt dir essenzielles ;)
    .htaccess in deinem root-ordner????
    hat die datei eine zeile mit
    php_flag display_errors on
    ????
    wenn ja, dann bekommst meldungen um die ohren geflogen, dass es dir anders wird ...
    und die solltest exaktest betrachten und beherzigen. wenn das nichts nützt, poste sie hier.

    Beitrag zuletzt geändert: 2.1.2013 2:49:33 von czibere
  6. Autor dieses Themas

    minis-isp

    minis-isp hat kostenlosen Webspace.

    Hallo & Sorry dass ich mich jetzt erst melde...

    Ja, die .htacces - Datei im root - Ordner hat diese Zeile.
    Fehler bekomme ich trotzdem keine angezeigt.

    Wenn ich eine neue Instanz der SessionHandler - Klasse erstelle und dann Sessions setzte, werden diese auch gesetzt
    und können auch genauso wieder ausgelesen werden. Es funktioniert eigentlich alles, nur was mich ärgert ist, dass die gesetzten und / oder veränderten Sessions nicht in der Datenbank auftauchen ...

    Grüße,
    minis-isp
  7. Das du keine Fehlermeldung bekommst liegt daran, dass es kein Fehler ist...

    Der Grund ist, dass du die Session Variablen selbst nicht speicherst. Es wird eine leere Session angelegt, diese wird nachher dann befüllt mit einem Zeitstempel einem value und einer id, dazu müsste deine Datenbank- Struktur richtig sein. Außerdem muss die Datei auch genau so heißen, wie die class also "SessionHandler"(.php)

    Da das ganze Objekt- Orientiert ist, musst du die class natürlich noch instanzieren. (Ist das geschehen?).


    Dein ganzer Code und ein Screenshot von deiner Datenbank wäre hilfreich ;-)
  8. minis-isp schrieb:
    ... Ich habe versucht, den Quelltext anzupassen, nachdem auch dies wieder ein Fehlschlag produzierte habe ich einfach mal zu Testzwecken den dort aufgeführten Quelltext kopiert...
    mich würde es vor allem interessieren, wie deine 'Registry' class aussieht ;)
    und dass du keine fehlermeldungen kriegst ist noch immer schleierhaft, weil du ja - wie du sagst - den original-code ausgeführt hast, wonach dann genau das stehen sollte
    Fatal error: Class 'Registry' not found in /<pathto>/<file>.php on line xx
    schau mal nach im php.ini unter 'display_errors = ??' ob da 'Off' oder 'On' steht!? (das ist der section 'Error handling and logging'). es gehört - was sonst - 'On' dorthin (nach der installtion ist - normaler weise - abgedreht).
  9. Autor dieses Themas

    minis-isp

    minis-isp hat kostenlosen Webspace.

    Hallo mal wieder,

    Sorry für die unregelmäßige Antwortzeiten, aber jetzt müsste es wieder alles gehen.
    mich würde es vor allem interessieren, wie deine 'Registry' class aussieht ;)


    Was für eine Registry - Class?
    Ich bekomme wirklich null fehlermeldungen, weder Fatale noch Warnungen oder Notice ... :-(
    Alles, php.ini, .htaccess und error_reporting sind freigegeben, aber es passiert leider einfach nur nichts.
    Die Sessions lassen sich zwar füllen und auslesen, scheinen aber nicht in der Datenbank anzukommen.

    Wie gesagt benutzt habe ich den Quelltext aus dem Link im 1. Beitrag.
    Die Tabelle habe ich nun mehrmals erstellt und das auch auf verschiedenen Servern, allerdings ohne Änderung.

    Grüße,
    minis-isp
  10. kill-a-teddy schrieb:
    Das du keine Fehlermeldung bekommst liegt daran, dass es kein Fehler ist...

    Der Grund ist, dass du die Session Variablen selbst nicht speicherst. Es wird eine leere Session angelegt, diese wird nachher dann befüllt mit einem Zeitstempel einem value und einer id, dazu müsste deine Datenbank- Struktur richtig sein. Außerdem muss die Datei auch genau so heißen, wie die class also "SessionHandler"(.php)

    Da das ganze Objekt- Orientiert ist, musst du die class natürlich noch instanzieren. (Ist das geschehen?).

    Dein ganzer Code und ein Screenshot von deiner Datenbank wäre hilfreich ;-)
    etwas sonderbar ;) du findest die ganzen codes hier und hier.

    minis-isp schrieb: ... Was für eine Registry - Class?
    oooops!? (um die windows registry geht es hier sicher nicht.) ich glaube, du hast dich etwas übernommen mit dieser materie.
    Ich bekomme wirklich null fehlermeldungen,
    ok! dann der reihe nach:
    1.
    Fatal error: Class 'Registry' not found in
    '/home/webpages/lima-city/czibere/.../index.php' on line 5
    2.
    Parse error: syntax error, unexpected T_STRING, expecting T_VARIABLE in
    '/home/webpages/lima-city/czibere/.../CRegistry.php' on line 16
    3.
    Parse error: syntax error, unexpected T_STRING, expecting T_VARIABLE in
    '/home/webpages/lima-city/czibere/.../CRegistry.php' on line 18
    4.
    Parse error: syntax error, unexpected '(', expecting ';' or '{' in
    '/home/webpages/lima-city/czibere/.../CRegistry.php' on line 28
    5.
    Parse error: syntax error, unexpected T_STRING, expecting T_VARIABLE in
    '/home/webpages/lima-city/czibere/.../CRegistry.php' on line 52
    6.
    Fatal error: Using $this when not in object context in
    '/home/webpages/lima-city/czibere/.../CRegistry.php' on line 9
    7.
    Fatal error: Call to a member function get() on a non-object in
    '/home/webpages/lima-city/czibere/.../index.php' on line 8
    8... und so weiter (sehr lange noch!).

    also dann habe ich mich über das ding hergemacht und es auch bezwungen ;) zum originalcode kurz: der herr Andreas Wilhelm schreibt einen wunderbar dokumentierten code, die einrückung ist musterhaft, aber leider, das ding funzt nicht.

    die funktionierende wariante (von mir, [bin kein "Angewandte Informatik BSc"] ;) ist
    hier zu sehen
    (wobei gesagt werden muss: unter umständen!). interessant wird die sache natürlich erst, wenn man mit mehreren verschiedenen browsern das ding besucht und anschließend sich die datenbank ansieht (eingeloggt wird dabei natürlich immer als czibere ... ich kann ja nicht wissen welche böse buben und natürlich auch mädels hir was vor haben ;)) das ablaufdatum der session in der db ist auf 20min eingestellt. nachher ist sie am bach runter (was auch zu sehen ist).

    leider! leider! ich kann den entstandenen code hier momentan nicht veröffentlichen! der grund ist, dass das ding ja nur bedingt funktioniert :( ich mache mich jetzt also daran, das ganze von 0 auf neu zu proggen. was dann entsteht, wird auch funzen und hier im forum veröffentlicht werden. das wird jezt aber leider etwas dauern, weil ich durch das wetter begünstigt, mein weingarten schneiden muss! (und auch das muss funzen, sonst habe ich 2014 keinen wein im keller! na das wäre doch böse! oder?)
  11. czibere schrieb:
    die funktionierende wariante (von mir, [bin kein "Angewandte Informatik BSc"] ;) ist
    hier zu sehen
    (wobei gesagt werden muss: unter umständen!). interessant wird die sache natürlich erst, wenn man mit mehreren verschiedenen browsern das ding besucht und anschließend sich die datenbank ansieht (eingeloggt wird dabei natürlich immer als czibere ... ich kann ja nicht wissen welche böse buben und natürlich auch mädels hir was vor haben ;)) das ablaufdatum der session in der db ist auf 20min eingestellt. nachher ist sie am bach runter (was auch zu sehen ist).

    leider! leider! ich kann den entstandenen code hier momentan nicht veröffentlichen! der grund ist, dass das ding ja nur bedingt funktioniert :( ich mache mich jetzt also daran, das ganze von 0 auf neu zu proggen. was dann entsteht, wird auch funzen und hier im forum veröffentlicht werden. das wird jezt aber leider etwas dauern, weil ich durch das wetter begünstigt, mein weingarten schneiden muss! (und auch das muss funzen, sonst habe ich 2014 keinen wein im keller! na das wäre doch böse! oder?)


    Wenn ich die Seite öffne, bin ich als "czibere" dauer- eingeloggt ^^ die Session wird auf jeden Anwender angewandt, - ist das der Sinn? (nicht "pampig" auffassen, bitte!)


    Also was ich mit der Speicherung der Session meinte. Es wird schon eine gespeichert in der Datenbank - jedoch bekommt die nur drei Werte
    (id, last_updated, start, value)
    . Wenn man mit Datenbanken arbeitet braucht man immer eine eindeutige ID, um Annomalien zu verhindern. In dem Code wird diese aber gelöscht und immer wieder mit 1 ersetzt / überschrieben. Hier haben wir das Problem

    a) man sieht nicht, woher die Variable $id kommt.
    b) Ist die Variable wahrscheinlich immer 1 und somit hat jeder Nutzer die gleiche Session.

    Außerdem ist in der Session nur die id und zwei Zeitstempel gespeichert, was einem irgendwie rein gar nichts bringt, da man diese keinem User zuweisen kann (erforderlich wäre eine Abfrage).


    PS:
    Das ganze Ding würde ich in die Tonne schmeißen es ist einfach Blödsinn. Für ein Objektorientiertes Login- System gibt es viel viel bessere und sichere Codes.

    Beitrag zuletzt geändert: 15.1.2013 16:02:40 von kill-a-teddy
  12. kill-a-teddy schrieb:
    ... Wenn ich die Seite öffne, bin ich als "czibere" dauer- eingeloggt ^^ die Session wird auf jeden Anwender angewandt, - ist das der Sinn? (nicht "pampig" auffassen, bitte!)
    nein. hast du meine vorige posting gelesen?
    Also was ich mit der Speicherung der Session meinte. Es wird schon eine gespeichert in der Datenbank - jedoch bekommt die nur drei Werte
    (id, last_updated, start, value)
    . Wenn man mit Datenbanken arbeitet braucht man immer eine eindeutige ID, um Annomalien zu verhindern. In dem Code wird diese aber gelöscht und immer wieder mit 1 ersetzt / überschrieben. Hier haben wir das Problem
    stimmt nicht. du hast also meine letzte posting nicht gelesen.
    a) man sieht nicht, woher die Variable $id kommt.
    b) Ist die Variable wahrscheinlich immer 1 und somit hat jeder Nutzer die gleiche Session.
    momentaner stand ist etwas über 230 (was mich allerdings schon etwas überrascht! siehe grund.)
    Außerdem ist in der Session nur die id und zwei Zeitstempel gespeichert, was einem irgendwie rein gar nichts bringt, da man diese keinem User zuweisen kann (erforderlich wäre eine Abfrage).
    die session variablen sind unter 'valu'
    PS:
    Das ganze Ding würde ich in die Tonne schmeißen es ist einfach Blödsinn. Für ein Objektorientiertes Login- System gibt es viel viel bessere und sichere Codes.
    darf ich mich kurz zitieren?

    czibere schrieb: ich kann den entstandenen code hier momentan nicht veröffentlichen! der grund ist, dass das ding ja nur bedingt funktioniert :( ich mache mich jetzt also daran, das ganze von 0 auf neu zu proggen...
    wenn man das original genau ansieht, erkennt man, dass das ein tut ist mit beispielhaftigkeit. ich habe es nur zum rennen gebracht (was ja partout nicht wollte ;)
  13. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!