Aller au contenu

Une session ne fonctionne pas: problème serveur ou client?


Sujets conseillés

Posté

Bonjour,

J'ai écrit un site de vente de livres en PHP, et j'utilise les sessions pour le login de mes utilisateurs: ils ont un panneau avec les ventes en cours (pour les modifier/supprimer etc.) accessible à eux seuls.

Dans chaque page qui doit être réservée aux utilisateurs enregistrés, je vérifie si la variable de session 'pseudo' est initialisée:

session_start();

if (!isset($_SESSION['pseudo'])) {
header('Location: login.php5');
exit();
}

Si ce n'est pas le cas, redirection vers le formulaire de login. Après login, je vérifie si le pseudo/mot de passe existe dans la BDD. Si c'est le cas, j'initialise la variable 'pseudo' et l'utilisateur est loggué, sinon, redirection vers une page qui dit que le mot de passe est mauvais:

  function verification($login, $pass) {
//Vérification dans la BDD
[...]
}

session_start();

if (isset($_POST['pseudo']) && isset($_POST['motdepasse'])) {
$pseudo = $_POST['pseudo'];
$motdepasse = $_POST['motdepasse'];

if (verification($pseudo, $motdepasse)) {
//On change d'identifiant de session
session_regenerate_id();
//On sauvegarde le pseudo dans l'identifiant de session
$_SESSION['pseudo'] = $pseudo;

$page = "index.php5";
} else {
$page = "authfail.php5";
}
}

[...]

echo "<meta http-equiv=\"refresh\" content=\"0; url=$page\">";

[...]

Ça fonctionne bien chez moi et chez la plupart de mes utilisateurs (différents OS et navigateurs), mais chez certain, il y a un problème: ils ne peuvent pas accéder aux pages privées: leur mot de passe est demandé à chaque fois, même quand il est bon. Quand il est faux, la page "mauvais mot de passe" est bien affichée.

Qu'est-ce qui peut bien poser problème?? Pourquoi est-ce que ça fonctionne chez certains et pas chez d'autres? Il me semble que les sessions, c'est côté serveur, donc si ça marche pour un, ça devrait marcher pour tous, non?

Un grand merci d'avance!

Posté

Salut,

Déjà, mets le session_start() toujours en premier sur ta page.

Ensuite, pour la redirection si pas loggé, vérifie que $_SESSION['pseudo'] n'est pas vide.

Si le login + mdp est bon, tu rediriges sur index.php5 -> ça correspond à quelle page?

@+

Posté

Je ne comprends pas la raison de l'appel à session_regenerate_id() ???

Pour quelle raison veux-tu changer l'id de session ?

Posté (modifié)

Dan : c'est une méthode de sécurité de plus en plus répandue ; même si pour ma part je la trouve totalement bidon.

Le principe est le suivant : à chaque page l'internaute/membre change d'ID de session, il est donc plus difficile pour un pirate de voler la session courante.

Sur le principe, je suis 100% d'accord, la fenêtre de "vol" passe de 30 minutes à 2 minutes environ.

Sauf que :

*) pour cela il faut passer le paramètre "true" à session_regenerate_id, sinon l'ancienne session n'est pas désactivée ; ce qui veut dire qu'au lieu de limiter les risques de vol de session, tu les augmentes très très fortement.

*) ça ne fonctionne pas si bien que ça, la plupart des navigateurs peuvent gèrer plusieurs connexions simultanément, et lorsque la requete A reçoit le nouvel ID de session il est parfois trop tard car la requete B est déjà "partie". Cette fameuse requete B n'a donc pas le bon ID de session et l'internaute (pourtant légitime) se fait déconnecter. C'est particulièrement vrai dès lors qu'on utilise les sessions dans des fichiers "externes" à la page (images, CSS, JS, tag de stats, frames, etc) ; ou tout simplement en cas de redirection (la fameuse redirection 301/302, dont beaucoup de navigateurs ignorent le dépot de cookie).

Pour ma part pour vraiment sécuriser cela j'utilise le système de "double ID", qui a au moins l'avantage de ne pas avoir ce genre d'effet de bords.

Modifié par Kioob

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...