Heim  >  Artikel  >  Backend-Entwicklung  >  Analyse des Implementierungsprinzips der Session-ID in PHP

Analyse des Implementierungsprinzips der Session-ID in PHP

王林
王林Original
2019-11-08 10:56:563102Durchsuche

Analyse des Implementierungsprinzips der Session-ID in PHP

Sitzungsarbeitsmechanismus:

Erstellen Sie eine eindeutige ID (UID) für jeden Besucher, und Variablen werden basierend darauf gespeichert auf dieser UID. Die UID wird in einem Cookie gespeichert oder über die URL weitergegeben.

PHPSESSIONID-Produktionsalgorithmusprinzip:

1. hash_func = md5 / sha1 #kann durch php.ini konfiguriert werden

2. PHPSESSIONID = hash_func ( End-IP des Kunden + aktuelle Zeit (Sekunden) + aktuelle Zeit (Mikrosekunden) + PHPs eigener Zufallszahlengenerator)

Aus der Inhaltsanalyse der Datenabtastwerte im obigen hash_func(*), mehrfach Benutzer in derselben Die Wahrscheinlichkeit einer Duplizierung der PHPSESSIONID, die bei Verwendung eines Servers generiert wird, ist äußerst gering.

Wenn ein Hacker außerdem die PHPSESSIONID eines Benutzers erraten möchte, muss er auch die „Client-IP, die aktuelle Zeit (Sekunden, Mikrosekunden), die Zufallszahl“ und andere Daten kennen, bevor er sie simulieren kann.

php.ini-Konfiguration ist wie folgt:

; Select a hash function for use in generating session ids.
; Possible Values
;  0 (MD5 128 bits)
;  1 (SHA-1 160 bits)
; This option may also be set to the name of any hash function supported by
; the hash extension. A list of available hashes is returned by the hash_algos()
; function.
; http://php.net/session.hash-function
session.hash_function=0

Funktionsprinzip der PHP-Sitzung

Die folgende Beschreibung verwendet Cookies zur Übertragung PHPSESSID.

1. Der Client fordert eine PHP-Serveradresse an.

2. Der Server empfängt die Anfrage und dieses Mal enthält das PHP-Skript session_start().

3. Der Server generiert ein PHPSESSID. (Die Standardsitzungsspeichermethode ist session.save_handler=files, die in Dateiform gespeichert wird. Die generierte Sitzungsdateinamensregel ist sess_PHPSESSID, und die Sitzungsdatei wird in session.save_path gespeichert.)

4 Antwortheader Response Headers:Set-Cookie:PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50; path=/ . Generieren Sie auf dem Client ein Cookie, um dies zu speichern PHPSESSID.

5. Zu diesem Zeitpunkt enthält das Cookie des Clients PHPSESSID und jede nachfolgende Anfrage des Clients enthält den Header Request Headers: Cookie:PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50. Jedes Mal, wenn der Server eine Anfrage vom Client erhält, kann er die Sitzungsdatei des Servers anhand dieser PHPSESSID finden. Durch Lesen und Schreiben dieser Sitzungsdatei wird das superglobale Variablenattribut der Sitzung realisiert.

Wenn der Client Cookies deaktiviert, da Cookies nicht zum Übertragen von PHPSESSID verwendet werden können, erstellt der Server jedes Mal eine Sitzungsdatei neu, wenn der Client eine Anfrage stellt, und die Sitzungsdatei kann nicht über Die Sitzung ist also ungültig. PHPSESSID

In diesem Fall können Sie

so einstellen, dass session.use_trans_sid übertragen wird. Der Unterschied zwischen der spezifischen Implementierung und Cookies besteht darin, dass PHPSESSID über HTTPs PHPSESSID übertragen wird. Dies wird erreicht, indem der PHPSESSID-Parameter „GET“ in jeder angeforderten Adresse ausgefüllt wird. url?PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50

Der PHPcli-Modus verwendet session

über session_id(), um die PHPSESSID der aktuellen Sitzung abzurufen und auch um die PHPSESSID der aktuellen Sitzung festzulegen.

Sie können dies im PHPcli-Modus festlegen, um den Zweck der Sitzungsverwendung zu erreichen, was sehr praktisch ist.

Zum Beispiel:

<?php
// session_id(&#39;vingbrv8m64asth0nhplu9gmb7&#39;);
session_start();
$_SESSION[md5(rand(100,999))] = rand(100,999);
var_dump($_SESSION);

Empfohlenes Tutorial:

PHP-Video-Tutorial

php Chinesisch-Website-Lernthema : PHP-Sitzung (einschließlich Bilder, Texte, Videos, Fälle)

Das obige ist der detaillierte Inhalt vonAnalyse des Implementierungsprinzips der Session-ID in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn