Regardons comment fonctionne ce site...
Quand je demande à voir les cookies le concernant, j'obtiend ça :
| Name | ASP.NET_SessionId |
|---|
| Value | /* clef unique de 32 caractères hexa */ |
|---|
| Host | www.phpcs.com |
|---|
| Path | / |
|---|
| Secure | No |
|---|
| Expires | At End Of Session |
| Name | UID |
|---|
| Value | /* Une autre clef encore plus étrange */ |
|---|
| Host | www.phpcs.com |
|---|
| Path | / |
|---|
| Secure | No |
|---|
| Expires | 25.10.2015 11:03:29 |
Principe ? Lors de mon identification, phpcs a posé deux cookies sur mon ordi.
L'un est posé automatiquement par Apache quand tu fais session_start() (au sommet de tes scripts !!!).
L'autre est à envoyé explicitement grâce à la fonction "set_cookie()" (au sommet de tes scripts !!!).
A chaque fois que mon navigateur demande une page à affichée (ici : http://www.phpcs.com/forum.v2.aspx?ID=599910), il envoi les info de ces deux cookies...
Le premier sert à retrouver les info de session. C'est l'identifiant !!!
Le deuxième sert à confirmer un clef contenu dans les variable de session. C'est le mot de passe !!!
Si les deux correspondent, c'est OK
Comment ?
------------------- tous tes script PHP commence par ça ---------
<?php // Aucun caractère avant !!!
$nom_session = 'ASP.NET_SessionId'; // pour le cas présent
session_start($nom_session);
if( !isset($_COOKIE[$nom_session]) ) Pas bon;
if( !isset($_COOKIE['UID']) ) Pas bon;
if( session_name() != $nom_session ) Impossible mais on sait jamais;
if( session_id() != $_COOKIE['PHPSESSID'] ) Pas bon;
if( $_SESSION['cookie_pass'] != $_COOKIE['UID'] = Pas bon;
Là c'est bon;
------------- Bien sûr lors de l'identification tu fait -------
<?php // Aucun caractère avant !!!
$nom_session = 'ASP.NET_SessionId'; // pour le cas présent
session_start($nom_session);
$clef =
md5(uniqid('UID'.rand(time()), true)); // quasi impossible à prédire... set_cookie('UID', $clef); // pose la clef sur client
$_SESSION['UID'] = $clef; // pose la clef sur serveur
Je te laisse méditer là dessus...
A+