Frage

Ich habe schon eine Weile das CodeIgniter System jetzt - aber es hat es ist Unzulänglichkeiten . Ich bin dankbar für das, was er lehrte mich, aber jetzt brauche ich eine Bibliothek für ein neues nicht-codeigniter Projekt und so bin ich auf der Suche rund um für Ideen, auf die Bibliotheken Dinge richtig haben und welche nicht. Ich werde wahrscheinlich Stücke aus mehreren Bibliotheken nehmen, alles zu bekommen, was ich brauche.

Ich habe gerade einen Blick eine der Kohana PHP-Session Bibliothek und Ich mag, wie es kehrt zu der native PHP Weg, um das $ _SESSION superglobalen statt zwingt eine Änderung $ this-> Sitzung für den Datenzugriff zu verwenden.

Auf jeden Fall wollte ich wissen, ob es noch andere gute Session Bibliotheken waren da draußen könnte ich durcheinander sein. Es gibt eine Menge, die in einer Sitzung behandelt werden müssen funktionell neben nur CRUD.

  • Unterstützung für NON-Cookies in Ihrem Browser-Sitzung vorbei (das heißt Facebook oder Flash-Uploader)
  • „Flash-Daten“, die nur für die nächste Seite zu laden dauert und dann wird automatisch entfernt.
  • Arbeitet mit $ _SESSION oder $ this-> Sitzung, so dass Programmierer müssen vorhandenen Code nicht ändern.
  • Unterstützt eine neue Session-ID (das heißt session_id ( 'new id')) bei Einstellung können Sie die ID auf halbem Weg durch die Seite zu ändern.
  • wird Speichert alle Daten am Ende der Seite Anfrage statt jede Zeitdaten hinzugefügt oder entfernt wird (spart zusätzliche DB-Abfragen).
  • Unterstützt Dateien, Cookies oder Datenbank zur Speicherung verwenden. (Oder Memcached wäre schön)
  • Versuche, den Zugang im Falle einer Sitzung Entführung zu verweigern. (IP, User-Agent oder Fingerabdruck )

Ich verbrachte einige Zeit über die Logik es für die CodeIgniter und Kohana Sitzung Bibliotheken und ich kam mit den folgenden, wie jeder beginnt und endet Sitzungen für die Seite.

/**************
** Kohana Sessions
**************/
If not native file storage {
    session_set_save_handler to the storage type (DB, cache, cookie...)
}

set the session_name() so php knows what cookie value to check

start session

/****** Saving ******/

session_write_close() which calls the given handler


/**************
** CI Sessions
**************/

Try to read_session() -> {
    session = Get cookie (if using cookies will also contain data)

    if(database) { 
        session .= pull data from database
    }

    checks if valid...

    $this->userdata = session data

} else { 
    create a new one
}

/****** Saving ******/

session data is serialized either way

if(cookie) {
    save cookie with serialized data and params like "last_activity"
}
if(database) {
    save serialized data in db and session in cookie
}
War es hilfreich?

Lösung

Haben Sie einen Blick auf Zend_Session ?

  • können Sie die Sitzungskennung über URL mit PHP Einstellungen übergeben
  • Sie können bestimmte Session-Variablen nach Zeit oder Hopfen (Requests)
  • verfallen
  • Migration in andere Anwendungen wird nicht so einfach sein, und ich denke, es ist nicht sehr gut, wenn Sie verwirren mit $_SESSION wenn Sie Zend_Session verwenden
  • Zend_Session hat einen Adpater based-Ansatz Sitzungsdaten gespeichert werden soll. Eine save-Handler für DBs enthalten ist, aber seine Architektur ermöglicht benutzerdefinierte Handler in weitergegeben werden.
  • Zend_Session unterstützt Validatoren die Gültigkeit einer Sitzung zu überprüfen. Auch hier haben wir eine offene Architektur, die Sie in benutzerdefinierten Objekten zur Validierung passieren läßt.
  • Sie können eine Sitzung sperren, auch bekannt als es machen read-only
  • Sie können die Instanziierung von mehreren Instanzen des gleichen Session Namensraum
  • verhindern
  • und es viel mehr ist mit Zend_Session wie Regenerieren Session-IDs, die Ausgabe erinnern-me-Cookies zu entdecken, zu widerrufen erinnern-me-Cookies und so weiter.

Andere Tipps

Ok, Nachdem durch die benutzerdefinierte Graben, nicht - $ _-SESSION basierte codeigniter lib, die beiden Kohana und Zend Libs (das $ _SESSION verwenden), und mehrere andere Sitzung Bibliotheken aus anderen Projekten Ich glaube, dass ich bauen die Antwort auf meine Problem. Etwas, das alle Dinge erfüllt ich oben aufgeführt (mit Ausnahme von Flash-Daten).

Hier ist der Code wenn jemand verwenden möchte es oder es lesen, während ihre eigene Bibliothek aufzubauen. Ich verließ das Ganze gründlich eine Menge Kommentare zu erklären und würde gerne ein Feedback auf sie haben. Es unterstützt Token, Flash-basierte uploaders, Cookies, Sitzungs-Regeneration alle 5 Minuten (oder was auch immer Sie setzen) mit der Entfernung von alten Sitzungen und Unterstützung für Sitzungen in jeder Datenbank, Dateisystem, memchache, oder jede andere Form, die Sie speichern möchten, Satz.

Hier finden Sie aktuelle Zebra_Session, ein Wrapper für die PHP-Standard-Session-Handling-Funktionen, die Verwendung von MySQL für die Speicherung

  • fungiert als Wrapper für Standard-Session-Handling-Funktionen von PHP, sondern Sitzungsdaten in Textdateien zu speichern, speichert sie in einer MySQL-Datenbank, eine bessere Sicherheit und eine bessere Leistung

  • Bereitstellen
  • Es ist ein Drop-in und seemingless Ersatz für PHP-Standard-Session-Handler: PHP-Sessions wird als vor der Verwendung der Bibliothek in gleicher Weise verwendet werden; Sie haben noch keinen vorhandenen Code ändern müssen!

  • implementiert Zeilensperrungen, dass die Daten korrekt gewährleistet in Szenarien mit mehreren gleichzeitigen Anfragen behandelt werden AJAX

  • nur eine Datei

  • reifen, hoch optimierte und ständig weiterentwickelt

  • sehr gute Dokumentation

Sie können dies in CI verwenden. EchoSession

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top