Bonjour Monsieur
Post by Jean Francois OrtoloBonjour
Post by Jean Francois OrtoloJ'aurais du me souvenir des conseils de Monsieur John Gallet.
En fait, le problème ne venait pas du cache.
Les identificateurs de session ( gérés par php ), semblent avoir eu des
doublons.
C'est un peu gros. On a plus de chance de gagner 2 fois au loto que
d'avoir le même PHPSESSID. Quand bien même, je suppose que php vérifie
qu'il n'y a pas déjà une session active avec le même ID.
Il m semble avoir vu sur les commentaires de PHP Manual, que le mode
de génération des ids de session, n'était pas strictement fiable, et
pouvait donner lieu à des doublons.
Post by Jean Francois OrtoloPost by Jean Francois OrtoloEn d'autres termes : Au moment où j'étais sur mon site, quelqu'un
d'autre ( adresse ip différente probablement faut pas pousser ), était
connecté à la même page que moi, avec le même id de session.
C'est une supposition ou tu l'as vérifié sur des logs?
Ca peut aussi être un vol de session.
Les ids de session ne sont pas dans les logs Apache.
Les identificateurs en question, me permettent d'identifier les
enregistrements des données à afficher dans deux tables MySQL,
lesquelles données ne servent qu'une seule fois, et sont effacées de
toute manière après 60 secondes, et aussi les données de l'id en cours
sont effacées avant insertion ( avec cet id ) des données.
Les données ne sont donc pas conservées,et il n'y a pas du tout
besoin que les ids soient identiques au cours d'une visite.
Le seul et unique critère de fiabilité, est qu'il n'y ait pas le même
id en même temps par deux visiteurs différents, au cours du chargement
d'un même *type* de page. ( Même avec des courses différentes. )
C'est le principe d'unicité et de non prévisibilité défendu par
Monsieur John Gallet sur son site : www.saphirtech.com , dont j'ai
encore un document Acrobat Reader sur la sécurité en environnement PHP.
Post by Jean Francois OrtoloPost by Jean Francois OrtoloDepuis ce matin, les id de session ( inscrits dans les tables MySQL avec
les enregs des données ), sont créés par une fonction tmp_random($nbre)
( que je donnerai volontiers ), qui génère une chaîne aléatoire ( et
imprévisible ), de $nbre caractères.
OK. Par contre, tes ID sont conservés juste pour avoir une liste des ID
déja créés et éviter les doublons, ou pour autre chose?
Pour disposer d'identifiants uniques et non prévisibles, qui ne
serviront qu'une fois.
Il sont changés à chaque chargement de page de stats d'un visiteur de
mon site.
Post by Jean Francois OrtoloPost by Jean Francois OrtoloJe n'ai pas besoin que cet id soit conservé entre chaque chargement de
page, il est généré en amont une fois par chargement de page.
La, par contre, ce n'est pas clair du tout, voir même inquiètant.
Je comprend que tu génère un ID différent pour chaque page et c'est
peut-être la cause du problème.
Un ID est créé pour chaque nouveau visiteur, c'est a dire si il
n'a pas de cookie PHPSESSID ou si il est expiré.
L'ID est conservé pendant toute la visite. En fait, on oublie l'ID.
et on laisse session_start() se débrouiller.
Celà ne m'empêche pas d'avoir des session, et un id de session ( que
j'appelle : $tmp_id_session ) global, et qui reste constant toute une
visite d'un visiteur.
L'identificateur unique et ponctuel, quant à lui, s'appelle
$tmp_tmp_id_session, est global aussi, et est créé dans mon script des
fonctions, par cette fonction : "tmp_random($nbre)".
Je peux en fournir le code si besoin, il est quand même plutôt court.
J'appelle cette fonction avec comme argument le nombre 50 ( l'id fait
50 caractères ).
Post by Jean Francois OrtoloL'ID peut être changé dans certains cas par sécurité comme par exemple
quand un visiteur anonyme s'identifie sur le site.
Dans ce cas, j'utiliserais des variables de session, ou bien mieux:
Un procédé aussi avec une table MySQL ( AUTHENTIFICATION ), car toutes
mes tables MySQL sont en majuscules.
J'ai une fonction make_authen(i$password), et une fonction
verif_authen() ( sans paramètre ).
Le password crypté est censé être enregistré comme variable de
session, et l'ensemble pseudo, password crypté et timestamp, dans la table.
Si du moins si j'utilisais ces fonctions, je ne les utilise pas.
Ces fonctions contenant le code d'authentification sont déjà faites,
mais je m'en sers pas, car je n'ai pas d'abonné, mon site est gratuit.
Pendant que j'y suis, je donne le code de la fonction tmp_random($nbre) :
[code]
function tmp_random($universal_key)
{
$string = "";
$user_ramdom_key =
"(aLABbCcEd1[eDf2FghR3ij4kYXQl5UmOPn6pVq7rJs8tuW9IvGwxHTy)K]Z§M_S";
srand((double)microtime(true) * time());
for($i=0; $i<$universal_key; $i++)
{
$string .=
$user_ramdom_key[rand()%strlen($user_ramdom_key)];
}
return $string;
}
[/code]
Merci de me donner vos critiques pour des améliorations à ce code.
Respectueusement.
Jean François Ortolo