PHP : Sessions totalement instables sur le cluster 21

Bonjour à tous,

J'ai déjà contacté le support OVH à plusieurs reprises par mon espace privé, mais aussi sur Twitter, pour toujours me voir retourner la même réponse : ce n'est pas de notre ressort … nous sommes totalement démuni.

Nous avons un script PHP simple, un cas d'école. Ce script enregistre simplement une Session :

session_start();

if (!isset($_SESSION['demo'])) {
$_SESSION['demo'] = ;
}

$_SESSION['demo'] = date('H:i');

echo '

';
var_dump($_SESSION);
echo '
';

Si vous actualisez plusieurs fois ce script, à raison d'environ une fois par minute (actualiser des centaines de fois en quelques secondes n'a pas de sens puisqu'il s'agit de Session), il y a une sorte de "Rollback" : https://www.planformation.com/grafikart.php

Vous aurez une, puis 2, 3, 4, 5, 6, 7 entrée puis … ça reviendra à 5. Avant de repartir à 8, 9, 10 puis ça reviendra à 4. Évidemment vous avez compris qu'il n'y a pas de règle stricte, c'est aléatoire.

A chaque fois que je contacte le support, on me retourne que c'est un mauvais script et que ce n'est pas de leur ressort … le script fait 5 lignes …

A titre informatif et sans aucune prétention, dans notre équipe nous avons deux développeurs PHP expérimentés (+ de 25 ans d'expérience à eux deux), nous avons contacté le support Symfony (car à la base nous avons contacté le problème de Session sur ce Framework) et aussi Grafikart sur son tchat - une référence en la matière -. Tous sont arrivé à la même conclusion …

Il s'agit du Cluster 21 (hébergement mutualisé PRO), testé avec PHP 7.2 et 7.1 pour le même résultat, nos numéros de tickets support sont les n°754347227 et n°625813718.

Merci d'avance …

Bonjour,

Et vous avez pris en compte le fait qu'un cluster composé de centaines de serveur et que par défaut les sessions sont enregistrés sur le serveur local sui peu changer à tout moment?

Cordialement, janus57

Bonjour,

Les PHPSESSID eux, restent identiques. Mais les données liées changent constamment à intervalle aléatoire.

Aucun des quatre développeurs ont prit en compte qu'une Session pouvait changer [rollback, revenir en arrière] à tout moment en quelques minutes.

Si vous me confirmez cela alors la problématique s'explique et merci … mais de fait, cela rend les sites avec SESSION totalement inutilisables, notamment pour les formulaires et sécurité CSRF (c'est ce qui nous a mis a la puce à l'oreille à la base, chaque token avait une durée de quelques minutes, parfois secondes).

Honnêtement, j'ai du mal à croire cela …

@janus57 si c'est le cas comment palier à se problème ?
Et ça pourrait expliquer des déconnexion inexpliquées à son espace membre etc. ?

Bonjour,

Vous êtes pas le premier à faire ce genre de topic et cela c'est toujours résolu via 1 des 2 méthode:

1 - les sessions sont enregistrés dans une BDD
2 - outils sont enregistrés sur le filerz (il y a un code spécifique à mettre dans le .ovhconfig de mémoire)

Car c'est le but d'un cluster c'est bien d'avoir plusieurs serveur ou le client peut être redirigé si jamais un serveur plante ou est surchargé donc 0 garantie de toujours tomber sur le même qui à la même session PHP (par défaut enregistrés dans /tmp qui est donc lié à un serveur précis et unique).

Cordialement, janus57

Bonjour,

Non mais pour les fichiers d'exécution, on est d'accord … mais des SESSION … leur but même est d'être persistée, c'est d'ailleurs leur seul et unique but. Nous avons testé en stockant les SESSIONS sur /tmp mais aussi sur un répertoire personnalisé de notre hébergement.

Nous allons regarder côté filerz mais ça frôle le ridicule … ça veut dire que 100% des SESSIONS sont inutilisables de manière basique sur la totalité des mutualisés ? Je reste quand même un minimum perplexe sur ces solutions … comment font les " débutants " qui installent des CMS si les SESSIONS ne fonctionnent pas …

Bonjour,


mais aussi sur un répertoire personnalisé de notre hébergement.

Et vous avez vérifier qu'il était bien présent et utilisé?
Car de mémoire c'est pas pris en compte sans introduire une variables de configuration dans le .ovhconfig (sauf si cela à changé depuis…).

Et pour les débutants si ils utilisent des CMS ils ont globalement pas de problème car par exemple pour WordPress de mémoire cela utilise pas le système de sessions PHP.

Cordialement, janus57

Bonjour,

J'avais exactement le même problème que toi. Impossible de mettre en place une sécurité CSRF.
J'ai résolu le problème en modifant le dossier de session.
ini_set('session.save_path', realpath(dirname($_SERVER['DOCUMENT_ROOT'])).'/../session');

Bonjour,

En suivant ce thread, nous avons tenté de reproduire le soucis et ne sommes pas en capacité de le reproduire. Les sessions restent bien en place.

Effectivement, votre site peut être amené à changer de serveurs lors des pics de charge afin de permettre à l'ensemble des sites de fonctionner correctement, mais cela n'arrive que de manière ponctuelle.

Dans tous les cas, nous déconseillons fortement le changement de dossier pour les sessions hors de /tmp (mais autorisons la manipulation à vos risques et périls). Si vous stockez les sessions sur votre filerz, votre site effectuera des écritures sur le disque dur de manière bien plus régulière et cela peut impacter les performances de votre site, surtout durant les pics de charges.

Nous sommes preneurs de vos démonstrations afin que le regarde s'il existe un bug plus profond.

Cordialement,
Vincent

Bonjour,
je vois que je ne suis pas le seul :frowning:
Depuis vendredi ( vers 15h et aujourd'hui vers 19h), par intermittence les sessions disparaissent, pire encore la fonction:
echo ini_set('session.save_path', $http_var['patch']['session']);
renvoie l'adresse /tmp,
Je suis sur un serveur mutualisé, je n'ai jamais eu de bug avant.
Des idées ?

Thomas

Bonjour,

@CAMILLED4, vous avez pu trouver la solution ?

J'ai le même soucis, les sessions (alors que le site tourne depuis 3 ans) disparaissent et que la fonction :
echo ini_set('session.save_path', $http_var['patch']['session']);
retourne /tmp alors que si je fais echo $http_var['patch']['session'] l'adresse est bonne !


Des idées ?

Thomas


ovhcon

Une vieille question, mais j'ai finalement trouvé la solution. Pour modifier session.save_path il faut ajouter une ligne dans le fichier .ovhconfig de votre hébergement.

`app.engine.flags=noforcetmp`

trouvé ici https://community.ovhcloud.com/t/20499
"