PHP Sessions. Eine detaillierte Beschreibung und Erklärung des Mechanismus der Arbeit.

Einführung
Wie verabredet, und wie die Session - Arbeit?
Anwendungsgebiet.
Mögliche Probleme und deren Lösungen.
Sicherheit
Weitere Informationen:
Beispiel Genehmigung Sitzungen über
Kommentare

Einführung
Sessions - es ist eigentlich sehr einfach.
Sie müssen nur verstehen, was sie brauchen und wie zu konstruieren.
Erste Antwort auf die erste Frage.
Wie in dem entsprechenden Abschnitt dieser FAQ gezeigt, wird der Web-Server nicht eine permanente Verbindung mit dem Client unterstützen, und jede Anforderung wird als neu behandelt, ohne jede Verbindung mit dem vorherigen.
Das heißt, es ist unmöglich, alle Anfragen aus dem gleichen Besucher zu verfolgen, noch Variablen zwischen Ansicht einzelner Seiten für ihn retten. Hier sind Lösungen für diese beiden Probleme wurden Sitzung erfunden.
Eigentlich ist die Sitzung, wenn auf den Punkt gebracht - ein Mechanismus zur eindeutigen Browser identifizieren und erstellt diese Datei-Browser auf dem Server, in dem die Session-Variablen gespeichert werden.

Mehr die Notwendigkeit für einen solchen Mechanismus zu malen, ich will nicht. Dies sind Lehrbuch Fälle wie im e-shop Genehmigung Einkauf, sowie, und nicht ganz trivial Probleme, wie zum Beispiel den Schutz der interaktiven Teile der Website von Spam.

In der Tat, ganz einfach, seine eigenen analogen Sitzungen zu machen, nicht so funktional wie die integrierte PHP, aber ähnlich in der Natur. In Cookies und Datenbank.
Auf Antrag des Skripts sehen, da kam das Cookie mit dem angegebenen Namen. Wenn das Cookie nicht vorhanden ist, dann setzen sie und schreiben Basis eine neue Zeile mit dem Benutzerdaten. Wenn das Cookie, dann aus der Datenbank gelesen. Eine weitere Anforderung wird von den alten Aufzeichnungen gelöscht und hier haben wir die Sitzungen des Mechanismus vorbereitet. Es ist nicht schwer. Aber es gibt einige Nuancen, die es bevorzugt, einen eingebauten Mechanismus für die Sitzungen zu verwenden.

Wie verabredet, und wie die Session - Arbeit?
Zuerst müssen Sie irgendwie Ihrem Browser identifizieren. Um dies zu tun, geben Sie ihm eine eindeutige ID, und ihn bitten, mit jeder Anforderung zu übergeben. Ich schäme mich, es zuzugeben, aber wenn ich zum ersten Mal über die Sitzungen fand heraus, ich dachte, es ist eine Art von einem speziellen Mechanismus war, eine neue Art und Weise mit dem Server-Browser zu kommunizieren - ". Tagung" Mit der Sitzung ID in besonderer Weise übertragen werden. Die Enttäuschung war grausam.
Sessions verwenden Standard-Datenübertragungsverfahren bekannt. Eigentlich andere leicht und da.
Id - das ist eine gemeinsame Variable. Standardmäßig seinen Namen - PHPSESSID.
PHP Problem senden sie an den Browser, so dass er es mit der folgenden Abfrage zurückgegeben. Aufgrund der oben genannten FAQ-Bereich ist klar, dass Sie nur eine Variable auf zwei Arten passieren kann: in einem Cookie oder POST / GET-Anfrage.
PHP verwendet beides.
Dabei treffen zwei Einstellungen in der php.ini:
session.use_cookies - wenn gleich 1, PHP eine Kennung in einem Cookie sendet , wenn 0 - keine.
session.use_trans_sid wenn gleich 1 ist , dann überträgt sie an PHP, indem auf die URL und Formen, wenn 0 - nein.
Um diese und andere Sitzungen Einstellungen zu ändern, können Sie auch, wie andere PHP - Einstellungen - in der php.ini - Datei, sowie von einem Team von ini_set() oder in Dateien Web - Server - Einstellungen

Wenn aktiviert, wird nur die erste, dann zu Beginn der Sitzung (jedes Mal , wenn Sie anrufen session_start () session_start () ) Stellen Sie den Cookie an den Client. Browser regelmäßig für jede folgende Abfrage gibt dieses Cookie und PHP hat eine Session-ID. Probleme beginnen, wenn der Browser das Cookie nicht zurück. In diesem Fall ohne einen Cookie-ID erhalten haben, werden PHP beginnen immer eine neue Sitzung, und der Mechanismus wird nicht funktionieren.

Wenn nur der zweite, wird das Cookie nicht auf. Und es ist etwas, für die in der Regel in der Tat ist es, einen eingebauten Mechanismus für die Sitzungen zu verwenden. Wenn das Skript tut seine Arbeit, und die Seite ist voll ausgebildet ist, sucht PHP an allem, und der Versuch, jeden und jede Form der Übertragung von Sitzungsdaten zu verknüpfen. Es sieht wie folgt aus:
<a href="/index.php">Index</a> in dreht
<a href="/index.php?PHPSESSID=9ebca8bd62c830d3e79272b4f585ff8f">Index</a>
und zu den Formen der versteckten Feld
<input type="hidden" name="PHPSESSID" value="00196c1c1a02e4c37ac04f921f4a5eec" />
Und der Browser, wenn Sie auf einen Link klicken oder das Formular auf die Schaltfläche klicken, senden Sie uns eine Anfrage gewünschte Variable - die Session-ID!
Aus offensichtlichen Gründen wird die Kennung nur auf die relativen Links hinzugefügt.

Theoretisch in unserem selbstgemachte Cookies und Sessions auf der Basis ist, ist es möglich zu sein, die Hände auf alle Übertragungszugeschrieben Links Eid - und dann unsere eigenen Sitzungen werden unabhängig von den Cookies laufen. Aber sehen Sie - es ist schön, wenn die Arbeit von jemand anderem erledigt ist? ;-)

Standardmäßig enthalten die neuesten Versionen von PHP beide Optionen. Wie kommt PHP in diesem Fall? Koch immer ausgestellt. Ein Link zur automatischen Vervollständigung nur, wenn PHP nicht ein Cookie mit der Session-ID zu finden. Wenn der Benutzer prvý Mal in dieser Sitzung auf Ihre Website kommt, wird das Cookie gesetzt und durch Links ergänzt. Bei der nächsten Eingabeaufforderung, wenn Cookies unterstützt werden, sieht PHP ein Cookie und nicht mehr die Links ergänzen. Wenn das Cookie nicht funktioniert, dann setzt PHP regelmäßig gehen zu den Links hinzufügen, und die Sitzung nicht verloren geht.
Benutzer, die Cookies arbeiten wird eine lange Verbindung mit der ID nur einmal sehen.

Puh. Mit der ID-Übertragung beendet.
Jetzt müssen wir es auf eine Datei auf der serverseitigen Daten anhängen.
PHP wird es für uns tun. schreiben Sie einfach
session_start ();
$_SESSION [ 'test' ]= 'Hello world!' ;
Und PHP wird in die Datei schreiben mit dieser Sitzung zugeordnet ist, die Variable-Test.
Hier ist ein sehr wichtiger Punkt.
Array $_SESSION - special.
Es in der Tat, sind die Variablen, die wir in einer Vielzahl von Skripten zur Verfügung gehen zu machen.
Um eine Variable in der Sitzung zu platzieren, ist es ausreichend, die Element-Array $ _SESSION zuzuweisen.
Um seinen Wert - genug, um zu appellieren an das gleiche Element. Ein Beispiel ist unten.

Bauen Sie Müll - Löschen veralteter Dateien, PHP auch selbst beschäftigt ist. Als codierten Daten und eine Reihe von allerlei andere nützliche Dinge. Als Ergebnis dieser Pflegearbeit mit Sitzungen ist es sehr einfach.
Hier sind wir in der Tat, kommen zum Beispiel für die Sitzungen.
Beispiel ist sehr klein:
<?
session_start
();
if (!isset(
$_SESSION [ 'counter' ])) $_SESSION [ 'counter' ]= 0 ;
echo
"Вы обновили эту страницу " . $_SESSION [ 'counter' ]++. " раз. " ;
echo
"<br><a href=" . $_SERVER [ 'PHP_SELF' ]. ">обновить" ;
?>
<?
session_start
();
if (!isset(
$_SESSION [ 'counter' ])) $_SESSION [ 'counter' ]= 0 ;
echo
"Вы обновили эту страницу " . $_SESSION [ 'counter' ]++. " раз. " ;
echo
"<br><a href=" . $_SERVER [ 'PHP_SELF' ]. ">обновить" ;
?>
Wir prüfen , ob wir eine Zählervariable in der Sitzung, wenn nicht, erstellen Sie es mit einem Wert von 0, und dann seinen Wert ableiten und wird um eins erhöht. Der erhöhte Wert wird in der Sitzung geschrieben, und der nächste Aufruf der Skriptvariable einen Wert von 1 haben, und so weiter.
Alles ist sehr einfach.

Um den Zugriff auf die Session-Variablen auf allen Seiten der Website zu haben, ist es notwendig, nur eine Zeile am Anfang jeder Datei zu schreiben, in denen wir Sitzung müssen (!):
session_start ();
Und dann auf die Elemente des Arrays $ _SESSION beziehen. Zum Beispiel wird die Berechtigungsprüfung wie folgt aussehen:
session_start ();
if (
$_SESSION [ 'authorized' ]<> 1 ) {
header ( "Location: /auth.php" );
exit;
}

Entfernen von Variablen aus der Sitzung.
Wenn Sie register_globals=off , ist es genug , um zu schreiben
unset( $_SESSION [ 'var' ]); Wenn nicht, dann müssen Sie es beim nächsten schreiben
session_unregister ( 'var' );
Anwendungsgebiet.
Es ist wichtig zu verstehen, warum die Sitzung verwendet werden soll, und was - nein.

Zunächst erinnern, dass die Sitzung nur verwendet werden, wenn sie für den Benutzer notwendig sind, nicht seine Hindernisse zu beheben. Denn er kann jederzeit loswerden ID zu erhalten!
Wenn zum Beispiel die Überprüfung, dass die Person ein Formular ausfüllt, kein Skript, ist der Benutzer in der Tatsache interessiert, dass die Sitzung der Arbeits - sonst wäre er nicht in der Lage sein, um die Form zu senden! Aber die Anzahl der Anfragen an das Skript Sitzung zu begrenzen ist nicht erforderlich - nur ein schädliches Skript wird nicht die ID zurück.

Zweitens. Es ist wichtig, eine klare Vorstellung von der Tatsache zu haben, dass die Sitzung - eine Sitzung mit der Website, wie sie von den Menschen verstanden wird. Er kam, arbeitete, schließen Sie den Browser - Sitzung beendet. Als Sitzung im Kino. Wollen Sie eine andere zu beobachten - ein neues Ticket kaufen. Starten Sie eine neue Sitzung. Dies ist, und technische Erklärung. Garantierte Mechanismus funktioniert nur Sitzungen ist es, den Browser zu schließen. Immerhin arbeiten kann der Client keine Cookies, und in diesem Fall natürlich alle ergänzt Verbindungskennung verloren ihre Schließung.
Jedoch kann die Sitzung verloren gehen, und ohne den Browser zu schließen. Aufgrund der im Hauptteil dieser FAQ besprochen Einschränkungen, können die Sitzungen des Mechanismus nicht den Moment erkennen, wenn der Benutzer den Browser schließt. Um dies zu tun, verwenden Sie ein Timeout - eine vorbestimmte Zeit, nach der, wie wir glauben, dass der Benutzer die Seite verlassen. Standardmäßig ist dieser Parameter 24 Minuten.
Wenn Sie für einen längeren Zeitraum Benutzerinformationen zu speichern, die Verwendung von Cookies und, falls erforderlich - die Datenbank auf dem Server. Insbesondere ist dies, wie alle gängigen Authentifizierungssysteme arbeiten:
- Bei der Benutzerauthentifizierung und Sitzungsstartanzeige Authorizing es übergeben.
- Wenn Sie den Benutzer zu "erinnern" benötigen, dann hat er das Cookie gesetzt, identifiziert sie.
- Das nächste Mal, wenn der Benutzer die Website besucht, um sich anzumelden, muss er entweder ein Passwort eingeben oder das System wird es auf den Keks erkennen vorher festgelegt und die Sitzung beginnt. Eine neue Sitzung statt die alte fort.

Drittens ist es nicht notwendig, die Sitzung ohne Diskriminierung zu starten, jede eingehende auf die Website. Dies wird eine völlig unnötige Belastung erstellen. Sie nicht die Sitzung für nichts verwenden - zum Beispiel in den Zählern. Was spaylog nennt Sitzungen, betrachtet, natürlich, auf der Grundlage der Statistik der Besuche, anstatt die Session-Mechanismus ähnlich wie php-shnomu verwenden.
Darüber hinaus nehmen Sie eine Suchmaschine, die Indizes Ihrer Website. Wenn der Crawler keine Cookies unterstützt, die Standard-PHP auf die Links PHPSESSID liefern wird, dass - soglasistes - ist nicht viel wie eine Suchmaschine, die gemunkelt wird, und so die dynamischen Verbindungen begünstigen nicht, und dann mit jedem Eintrag tun - neue Adresse !
Wenn eine Sitzung verwendet wird, Zugriff auf den privaten Bereich der Website zu beschränken, ist es einfache Suchmaschine und es sollte nicht indiziert werden.
Wenn wir die gleiche Seite als autorisiert oder nicht autorisierte Benutzer, hier zeigen haben, ist ein Trick zu helfen - eine Sitzung zu starten nur für diejenigen, die das Passwort eingegeben haben, oder diejenigen, die bereits Sitzung begonnen haben.
Um dies zu Beginn jeder Seite statt nur session_start () session_start () schreiben
if (isset( $_REQUEST [ session_name ()])) session_start (); So beginnen wir die Sitzung nur für diejenigen, die Kennung gesendet.
Dementsprechend müssen wir auch das erste Mal an den Benutzer zu senden, - die zum Zeitpunkt der Zulassung.
Wenn der Name korrekt ist, und Schuppen - schreiben session_start () session_start () !

Mögliche Probleme und deren Lösungen.

Die häufigsten Fehler, die PHP gibt bei dem Versuch, mit den Sitzungen zu arbeiten, sind wie folgt:
Zwei von diesen,
Warning: Cannot send session cookie - headers already sent
Warning: Cannot send session cache limiter - headers already sent

wegen dem gleichen Grund beschrieben die Lösung in diesem Fälschungs hier
Drittens
Warning: open(/tmp\sess_SID, O_RDWR) failed: No such file or directory (2) in full_script_path on line number , O_RDWR) fehlgeschlagen: Keine solche Datei oder das Verzeichnis ( Warning: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) Warning: open(/tmp\sess_SID, O_RDWR) failed: No such file or directory (2) in full_script_path on line number (zuvor sah es aus wie Warning: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) - Dateien) Stellen Sie sicher , dass die aktuelle Einstellung. Warning: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) , Warning: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) - Warning: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) ),
wenn Sie es aus dem Englischen übersetzen, erklärt im Detail, das Problem: nicht in der php.ini Pfad zu dem Verzeichnis angegeben, in dem die Dateien in den Sitzungen geschrieben werden. Dieser Fehler wird am einfachsten korrigiert. Einfach ein Verzeichnis registrieren, die beschreibbar existiert und ist, zum Beispiel,
session.save_path = c:\windows\temp
Und vergessen Sie nicht Apache danach neu zu starten.

Wie sich herausstellt, hat die menschliche Einfallsreichtum sind keine Grenzen gesetzt, so muss ich erklären:
dritte Fehlermeldung (Sie das Verzeichnis nicht finden können) wird unweigerlich zu dem Erscheinen der ersten beiden, führen , da die Fehlermeldung - es Ausgabe an den Browser und nach den Header ist , kann nicht verwendet werden. Also keine Eile , einen vorzeitigen Abschluss zu suchen, sondern zuerst den richtigen Weg Liste!

Die nächste häufigste Problem beim Arbeiten mit Sessions ist ein schweres Erbe register_globals. NICHT die Skriptvariablennamen lassen, die den Index des Arrays $ _SESSION entsprechen!
Wenn register_globals auf Werte = einander überschreiben, und Sie stecken bleiben.
Und wenn register_globals = off wird ein weiterer Fehler: ". Das Skript beruht möglicherweise auf einer Sitzung Nebenwirkung, die bis PHP 4.2.3 bestanden", wenn das Skript eine Session-Variable hat keinen Wert hat, und die globale Variable mit dem gleichen Namen . Um es loszuwerden, sollten wir immer Variablen initialisieren, bevor es mit (oder zumindest die Existenz überprüfen) und keine globalen Variablen-Namen zu geben, die mit den Indizes des Arrays $ _SESSION übereinstimmen.

Wenn nicht funktioniert, aber keine Meldung angezeigt wird, können Sie am Anfang des Skripts zwei Linien sind verantwortlich für den Abzug aller Fehler auf dem Bildschirm hinzufügen - es ist möglich, dass der Fehler ist, aber man sieht sie nicht.
ini_set ( 'display_errors' , 1 );
error_reporting ( E_ALL );
sehen oder einen Fehler in der error_log. Im Allgemeinen ist das Thema der Anzeige von Fehlermeldungen über den Rahmen dieses Artikels sprengen, so nur sicherstellen, aber, dass Sie sie sehen können. Ein Bit kann in prodrobnee zu finden , Fehler zu lesen Sie diesen Abschnitt .

Wenn Sie sicher sind , dass es keine Fehler gibt, aber das obige Beispiel funktioniert nicht alle gleich sind , ist es möglich , dass in PHP nicht Übertragung gehen durch URL aktiviert ist und Cookies aus irgendeinem Grund nicht funktionieren.
Sehen Sie, dass Sie mit Cookies tun.
Im Allgemeinen, wenn Sie Session "nicht funktionieren", müssen Sie zunächst versuchen, die Session-ID Hände zu übergeben, das heißt, zu verknüpfen und die Kennung, um es zuzuschreiben:
<?
session_start
();
if (!isset(
$_SESSION [ 'counter' ])) $_SESSION [ 'counter' ]= 0 ;
echo
"Вы обновили эту страницу " . $_SESSION [ 'counter' ]++. " раз.<br>
<a href="
. $_SERVER [ 'PHP_SELF' ]. '?' . session_name (). '=' . session_id (). ">обновить</a>" ;
?>
<?
session_start
();
if (!isset(
$_SESSION [ 'counter' ])) $_SESSION [ 'counter' ]= 0 ;
echo
"Вы обновили эту страницу " . $_SESSION [ 'counter' ]++. " раз.<br>
<a href="
. $_SERVER [ 'PHP_SELF' ]. '?' . session_name (). '=' . session_id (). ">обновить</a>" ;
?>
In diesem Fall sollten Sie sicherstellen , dass die Richtlinie nicht enthalten ist session.use_only_cookies , die PHP - Session - ID verbietet nehmen, wenn es in der URL übergeben wurde

Wenn dieses Beispiel nicht funktioniert, dann ist das Problem entweder banal Tippfehler ( die Hälfte der "Probleme" mit den Sitzungen kommt aus dem falsch geschriebenen Variablennamen) oder zu alte Version von PHP: Support - Sitzungen erschien in der Version 4.0, und das Array $_SESSION - 4.1 (vor es verwendet $HTTP_SESSION_VARS ).
Wenn Sie verdienen - das Problem in Cookies. Oberbau - was für ein Cookie, um die Server-Browser setzt, wenn der Browser zurückgibt. Die Suche ist sehr nützlich Browsing Surfen HTTP-Überschrift zwischen dem Browser und dem Server ausgetauscht werden .
Erläuterung des Funktionsprinzips von Cook geht darüber hinaus und so zu viel Text, aber zumindest dafür sorgen, dass der Cookie-Server eine Kennung sendet, und den Browser - kehrt zurück. Auch IDs miteinander übereinstimmen =)
Cookies setzen sollte folgendermaßen aussehen
Set-Cookie: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6; oder
Set-Cookie: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6; path=/ Set-Cookie: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6; path=/ (Wenn Sie ein Skript fordern ist nicht im Root - Verzeichnis)
Ein Server sollte so aussehen
Cookie: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6 oder
Cookie: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6; b=b Cookie: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6; b=b , wenn der Browser die anderen Cookies anderer als der Session - ID zurückgibt.

Wenn der Browser das Cookie nicht zurück - überprüfen, um zu sehen, ob Cookies überhaupt arbeiten.
Stellen Sie sicher, dass die Domain, auf die Sie sich beziehen, hat einen normalen Namen (in dem es mindestens einen Punkt und enthielt keine ungültigen Zeichen wie einem Unterstrich) und reinigen Sie Ihren Browser-Cache - sind die beiden Hauptgründe für Kotormo Cookies möglicherweise nicht.

Wenn das Beispiel von dieser Arbeit, und Ihre eigenen Code - nein, das ist das Problem offensichtlich nicht in den Sitzungen und in den Algorithmus. Sehen Sie, wo das verlorene in Schritten.

Ein weiteres Problem kann auftreten, wenn Sie eine Umleitung durch Header und Navigation mit JavaScript verwenden.
Die Tatsache , dass PHP automatisch die Session - ID anhängt nur auf Links Art von <a href=> , aber tut es nicht für die Kopf s, Javascript, Meta - Tags.
Daher ist es notwendig, einen Identifikator Hände, wie dies hinzuzufügen:
header ( "Location: /script.php?" . session_name (). '=' . session_id ());
Es sollte, dass die PHP-Datei lochit Sitzung in Erinnerung bleiben. Das heißt, wenn einer Ihrer Skript wird die Sitzung und lange Läufe zu starten, und die anderen in dieser Zeit versucht, es mit der gleichen Kennung zu starten, wird es hängen. Daher ist in den lang laufenden Skripte sollten nur eine Sitzung starten , wenn es gebraucht wird, und schließen Sie es dann durch session_write_close()

In ähnlicher Weise sehr selten, und es ist unklar, wie die sich abzeichnende Problem, dass session.save_handler Einstellung einen anderen Wert als Dateien. Fix - Wenn es nicht ist.

Sicherheit
Sichere Sitzungen - ein großes Thema. Deshalb konzentriere ich mich auf ein paar Hauptpunkte.
Die meisten Lehrbuch - nicht die ID durch die Adressleiste übertragen. Es steht geschrieben, auch in der php.ini, aber es schränkt die Funktionalität von Sitzungen. Wenn Sie sich entscheiden, diesen Rat zu befolgen, außer session.use_trans_sid = 0 nicht vergessen session.use_only_cookies = 1
Es ist ratsam, um die Sitzung zu einer IP-Adresse zu binden: Wenn also die ID gestohlen wird, würde der Bösewicht nicht in der Lage sein, in den meisten Fällen zu verwenden.
Es wird empfohlen, die Richtlinie session.save_path zu verwenden, wobei ein eigenes Verzeichnis angeben Session-Dateien zu speichern. Es ist sicherer, als wenn sie in einem gemeinsamen temporären Verzeichnis auf dem Standardserver gespeichert sind.

Weitere Informationen:
  • Neben Cookies, Session-Mechanismus sendet auch Header-Caching von Seiten (die gleiche Cacheverwaltung) zu verbieten. Für HTML ist es richtig und notwendig. Aber wenn Sie versuchen, eine Genehmigung der Prüfung an das Skript eine Datei zu senden, lehnt den Internet Explorer zum Download bereit. Es ist aus diesem Header. Anruf
    session_cache_limiter ( "private" ); vor Beginn der Sitzung ist, das Problem zu lösen.
  • Wie mag es seltsam erscheinen, aber in dem Array $_SESSION nicht numerischen Indizes verwenden können - $_SESSION [ 1 ], $_SESSION [ '10' ] $_SESSION [ 1 ], $_SESSION [ '10' ] - Sessions bezogen wird, wird nicht funktionieren.
  • Irgendwo zwischen den Versionen 4.2 und 5.0, es war unmöglich , zu etablieren session.use_trans_sid mit ini_set () ini_set () . Seit 5.0 ist bereits wieder möglich.
  • Vor der Version 4.3.3, PHP Cookie Cookie, wenn zu Beginn der Sitzung in der Anfrage otsutstvval ID nur dann gesendet. Nun wird das Cookie jedesmal , wenn Sie rufen gesendet session_start () session_start ()

    Beispiel Genehmigung Sitzungen über
    Das ist alles ein kleines Beispiel verdeutlichen:
    Auth.php erstellen Sie eine Datei:
    <?
    if (isset( $_POST [ 'auth_name' ])) {
    $name = mysql_real_escape_string ( $_POST [ 'auth_name' ]);
    $pass = mysql_real_escape_string ( $_POST [ 'auth_pass' ]);
    $query = "SELECT * FROM users WHERE name='$name' AND pass='$pass'" ;
    $res = mysql_query ( $query ) or trigger_error ( mysql_error (). $query );
    if (
    $row = mysql_fetch_assoc ( $res )) {
    session_start ();
    $_SESSION [ 'user_id' ] = $row [ 'id' ];
    $_SESSION [ 'ip' ] = $_SERVER [ 'REMOTE_ADDR' ];
    }
    header ( "Location: http://" . $_SERVER [ 'HTTP_HOST' ]. $_SERVER [ 'REQUEST_URI' ]);
    exit;
    }
    if (isset(
    $_GET [ 'action' ]) AND $_GET [ 'action' ]== "logout" ) {
    session_start ();
    session_destroy ();
    header ( "Location: http://" . $_SERVER [ 'HTTP_HOST' ]. "/" );
    exit;
    }
    if (isset(
    $_REQUEST [ session_name ()])) session_start ();
    if (isset(
    $_SESSION [ 'user_id' ]) AND $_SESSION [ 'ip' ] == $_SERVER [ 'REMOTE_ADDR' ]) return;
    else {
    ?>
    <form method="POST">
    <input type="text" name="auth_name"><br>
    <input type="password" name="auth_pass"><br>
    <input type="submit"><br>
    </form>
    <?
    }
    exit;
    ?>