Aller au contenu

Petit soucis d'authentification


Sujets conseillés

Posté (modifié)

B'soir le hub...

Voila l'ennoncé du problème:

J'ai un script qui me permet d'authentifier les membres à l'entrée.

Ce script ne me pose pas de problème, l'authentification se fait bien.

Par contre, la où j'ai un truc qui m'echappe:

J'ai une varibale de session: $_SESSION['name'] qui me trimballe le login du membre de page en page.

J'ai crée un script qui me permet de savoir qui est en ligne à l'instant "T".

Hors, il m'arrive d'avoir la fameuse variable de session qui est vide... Et je ne comprend pas pourquoi...

De plus, dans l'espace membre, certains scripts utilisent cette varibable, pour l'envoi de photo par exemple, et ces scripts ne renvoient pas d'erreurs....

Un truc m'echappe....

Faudrait vraiment que j'arrive à résoudre ce problème, car j'ai besoin de créer de nouvelles fonctions, mais je ne veux pas prendre le risque de me retrouver avec des erreurs liées à cette variable qui serait vide.

Merci de vos avis eclairés.

Steph'

Modifié par steph13
Posté

Salut,

Une question qui peut paraitre bête, mais parfois c'est tellement évident qu'on y pense pas : Est tu sûr de bien faire appel à la fonction session_start() en haut des pages qui posent problèmes ?

Sinon, est ce un phénomène aléatoire (Sur une même page et pour une même action, parfois ça fonctionne et parfois non) ou alors, un phénomène qui se produit systématiquement sur certaines pages ?

Posté

Salut,

Yes, je fais apel au session_star().

Sur chaque page, il y a une protection qui verifie que la session est bien ouverte.

Ce qui me rend encore plus dubitatif face au problème.

Et le problème est vraiment aléatoire...

Posté (modifié)

Peut-être utilises tu les redirections à l'aide de la fonction php header() ? auquel cas tu dois transmettre tes identifiants de sessions en dur si tu ne veux pas les perdre.

Modifié par dièse
Posté

Tu peux récupérer le nom de ta session PHP avec la fonction session_name() et sa valeur avec session_id().

Ainsi en utilisant le code suivant tu ne perdras plus ton identifiant :

header("Location: tapage.php?".session_name()."=".session_id());

Posté (modifié)

Oui, oui, tu n'as trop d'autres solutions si tu veux utiliser les headers. Mais ça ne pose pas de problème, c'est de toute façon ce qui se passe lorsqu'un visiteur a désactivé les cookies sur son navigateur.

Modifié par dièse
Posté

Hum...

Donc, faut que je reovis tout les liens de l'espace membre...

Ca va etre sportif ca tiens.

Bon, bhé merci pour l'info :)

Posté
Hum...

Donc, faut que je reovis tout les liens de l'espace membre...

Ca va etre sportif ca tiens.

La solution que donne dièse concerne uniquement les headers.

Pour les liens, ce n'est pas necessaires normalement, php le fait automatiquement. (du moins, dans la configuration par defaut de php)

Posté

Donc, si je comprend bien:

La redirection de base pour authentifier un membre, du moins, sur ce que j'ai fait, et bien cela se fait avec header.

En cas donc , je colle ma variable de session dans l'url.

En revanche, pour ce qui est des liens classiques, pas besoin de moifier.

Pardonnez moi ce coté un peu basique, y'a pas longtemps longtemps que je me suis collé au PHP, et jai encore des lacunes (mais je me soigne)

Posté

Normalement oui.

Pour tes redirection, tu fais :

header("Location: tapage.php?".session_name()."=".session_id());

Et pour les liens, tout simplement :

echo '<a href="tapage.php">ton lien</a>';

Je te conseil de tester ton système en désactivant les cookies, pour vérifier que tout fonctionne correctement.

Posté

Je suis ne plein dedans la :P

Alors, bon, en utilisant

header("Location: tapage.php?".session_name()."=".session_id());

Pas de problème(j'ai veillé a desactiver les cookies au préalable).

La où cela se corse:

Chaque page de l'espace membre est protegé, ce qui semble logique.

Comment donc?

Je verifie l'existence la varibale $_SESSION

Hors, parcourant le manuel php il est explicitement idique de ne pas avoir recours à session_register et ses frangins, si on utilise $_SESSION....

Deuxieme chose, en utilisant

header("Location: tapage.php?".session_name()."=".session_id());

Je suis bien authentifier, mais je ne peux pas surfer dans l'espace... Logique, puisque que ma varible $_SESSION n'existe pas...

Je suis en train de lire des articles sur le sujet, et visiblement, chacun préconise sa petite solution.

J'en déduit qu'il n'y a pas une façon de faire, mais plusieurs.

Donc, faut que je trouve un sytème "batard" qui fonctionne à tout les coups, et qui ne m'oblige pas à revoir tout mes liens...

Posté

Voici comment moi je faisais :

Code pour ouvrir la session (login) :

session_start();

// Ici, tout ton code pour verifier les identifants transmis par le formulaire de connexion.

// Si ces identifiants sont valides :
// J'enregistre son pseudo dans une varible de session
$_SESSION['login'] = $_POST['login'];

Sur une page quelconque :

session_start();

// Vérification de la session
if ( !isset($_SESSION['login']) ) {
echo 'Erreur : votre session n\'est pas valide !';
exit;
}


// La page...

Même si ça fait un bon moment que je n'ai pas manipulé les sessions, ça devrait fonctionner.

Posté (modifié)

J'ai exactement la meme chose....

Sauf que, par moment, bah la variable $_SESSION est vide, et le membre peut tout de meme se ballader sur son espace membre.

C'est la que je ne pige pas.

Si c'etait un simple probleme de cookie, il ne pourrait meme pas accèder au site... Hors, la il peut.

Mon site est hanté !! lol

Modifié par steph13
Posté (modifié)

Il faudrait que tu nous en dises un peu plus sur tes scripts ;). Quel est le code d'authentification de tes membres utisé sur tes scripts ?

Modifié par dièse
Posté

Voici le code qui gère l'authentification


session_start();

...
Connexion a la bdd
...

$pwd = $_POST["pass"];
$pwdbase = md5 ($pwd);
$login=$_POST["login"];

if (isset($_POST["pass"]))
{
mysql_connect($db_host,$db_user,$db_pass) or die("Unable to connect to database");
_AT_mysql_select_db($database) or die( "Unable to select database");

$resultat=mysql_query("SELECT pass FROM tbl WHERE login ='".$login."'");

if($ligne = mysql_fetch_array ($resultat))
{
if(($ligne['pass']== $pwdbase) && ($ligne['pass']!='') )
{
$_SESSION["uname"] = $_POST["login"];
}
}
mysql_close();
}

// Si la session n'est pas définie, redirection sur page d'erreur
if (!isset($_SESSION["uname"]))
{
session_destroy();
header ("location:../page_refus.php");
}
//redirection vers l'espace membre
header ("location:../membres/page_info.php?");

Et voici le code qui protege les pages

session_start();

if (!isset($_SESSION["uname"])) {
session_destroy();
header ("location:../page_erreur.php?code=acces");
}
else {
$session=$_SESSION['uname'];
}

Posté

Bien,

En lisant quelques infos de ci de la, j'ai pas mal avancé.

Je suis en train de tester un script qui va en premier lieu verifier si le cookie de session existe.

Si tel est le cas, on fonctionne en mode classique avec $_SESSION.

Dans le cas contraire, j'utilise la solution session_register().

Je vous tiens au courant plus tard dans la journée. Le temps de voir comment tout cela fonctionne.

Posté
Je suis en train de tester un script qui va en premier lieu verifier si le cookie de session existe.

Si tel est le cas, on fonctionne en mode classique avec $_SESSION.

Dans le cas contraire, j'utilise la solution session_register().

Je ne vois pas l'intérêt :blink: , mais comme je ne vois pas non plus ce qui peut ne pas fonctionner dans ton script... :blush:

Posté (modifié)

Et bien l'intêret, je l'ai trouvé sur un site qui reprend le manuel php, en détaillant quelques fonctions autour des sessions.

Lire cet article

L'idée etant de partir sur le fait que les navigateurs acceptent les cookies, et d'avoir une solution de secours au cas ou cela ne serait pas le cas.

Par ailleurs, il est utile de verifier que session.use_trans_sid soit activé.

S'il ne l'est pas, l'id de session n'est automatiquement transmis par php (si j'ai bien suivi).

En ce cas, d'après des infos que j'ai trouvé sur un autre forum ou Dan sevissait auparavant, il faut:

Dans le htaccess, ajouter :

php_value session.use_trans_sid 1

ou

php_value session.use_trans_sid true

Puis dans les pages php, ajouter:

ini_set('session.use_trans_sid', 1);

(si, encore une fois, j'ai bien tout suivi)

Je viens de proceder à quelques test, et cela semble fonctioner parfaitement.

Je vais un peu pousser tout cela pour voir.

Dan, si tu passes par ici, arrête moi si je dis des anneries :)

Modifié par steph13
Posté

Après plusieurs test, cela semble tourner convenablement...

Je vais continuer de tester et faire tester avnt de mettre en prod.

Merci à vous pour votre aide.

  • 2 months later...
Posté

Salut Steph, je suis en train de m'arracher les cheveux sur le même problème que toi il y'a quelques semaines... Pourrais-tu poster un aperçu du code que tu utilises, pour parvenir à cette solution "batarde", mais qui présente l'avantage non négligeable de fonctionner ?

Existe-t'il d'autres moyens de faire en sorte que les sessions soient transmises si le visiteur n'accepte pas les cookies, que la concaténer à l'URL ?

Veuillez vous connecter pour commenter

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



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