Maison  >  Article  >  développement back-end  >  Analyse du principe d'implémentation de Session ID en PHP

Analyse du principe d'implémentation de Session ID en PHP

王林
王林original
2019-11-08 10:56:563102parcourir

Analyse du principe d'implémentation de Session ID en PHP

Mécanisme de fonctionnement de la session :

Créez un identifiant unique (UID) pour chaque visiteur, et les variables sont stockées en fonction sur cet UID. L'UID est stocké dans un cookie ou transmis via l'URL.

Principe de l'algorithme de production PHPSESSIONID :

1. hash_func = md5 / sha1 #peut être configuré par php.ini

2. PHPSESSIONID = hash_func ( IP de fin du client + heure actuelle (secondes) + heure actuelle (microsecondes) + propre générateur de nombres aléatoires de PHP)

À partir de l'analyse du contenu de la valeur d'échantillonnage des données dans le hash_func(*) ci-dessus, plusieurs utilisateurs sont dans le idem La probabilité de duplication du PHPSESSIONID généré lors de l'utilisation d'un seul serveur est extrêmement faible.

De plus, si un hacker veut deviner le PHPSESSIONID d'un utilisateur, il doit également connaître "l'adresse IP du client, l'heure actuelle (secondes, microsecondes), le nombre aléatoire" et d'autres données avant de pouvoir le simuler.

La configuration de php.ini est la suivante :

; 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

Principe de fonctionnement de la session PHP

La description suivante utilise des cookies pour transmettre IDPHSESSID.

1. Le client demande une adresse de serveur php.

2. Le serveur reçoit la requête, et cette fois le script php contient session_start().

3. Le serveur générera un PHPSESSID. (La méthode de stockage de session par défaut est session.save_handler=files, qui est stockée sous forme de fichier. La règle de nom de fichier de session générée est sess_PHPSESSID et le fichier de session est stocké dans session.save_path.)

4. en-tête de réponse Response Headers:Set-Cookie:PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50; path=/ . Générez un cookie sur le client pour enregistrer cela PHPSESSID.

5. À l'heure actuelle, le cookie du client contient PHPSESSID, et chaque demande ultérieure du client inclura l'en-tête Request Headers : Cookie:PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50. Chaque fois que le serveur reçoit une requête du client, il peut trouver le fichier de session du serveur sur cette base PHPSESSID En lisant et en écrivant ce fichier de session, l'attribut de super variable globale de la session est réalisé.

Si le client désactive les cookies, puisque les cookies ne peuvent pas être utilisés pour passer PHPSESSID, alors le serveur rétablira un fichier de session à chaque fois que le client fera une demande, et le fichier de session ne pourra pas être réutilisé via PHPSESSID. La séance n'est donc pas valide.

Dans ce cas, vous pouvez configurer session.use_trans_sid pour transmettre PHPSESSID. La différence entre l'implémentation spécifique et les cookies est que PHPSESSID est transmis via HTTP GET. Ceci est réalisé en complétant le paramètre PHPSESSID "url?PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50" dans chaque adresse demandée.

Le mode PHPcli utilise session

via session_id() pour obtenir le PHPSESSID de la session en cours, et également pour définir le PHPSESSID de la session en cours.

Vous pouvez définir cela en mode PHPcli pour atteindre l'objectif d'utiliser la session, ce qui est très pratique.

Par exemple :

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

Tutoriel recommandé : Tutoriel vidéo PHP

Sujet d'apprentissage du site Web chinois php  : session php (incluant photos, textes, vidéos, cas)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn