steph13 Posté 19 Février 2006 Posté 19 Février 2006 (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é 19 Février 2006 par steph13
Sonia Gazil Posté 19 Février 2006 Posté 19 Février 2006 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 ?
steph13 Posté 19 Février 2006 Auteur Posté 19 Février 2006 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...
dièse Posté 19 Février 2006 Posté 19 Février 2006 (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é 19 Février 2006 par dièse
steph13 Posté 20 Février 2006 Auteur Posté 20 Février 2006 Salut Dièse, Transmettre les identifiants en dur ? c'est a dire ??
dièse Posté 20 Février 2006 Posté 20 Février 2006 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());
steph13 Posté 20 Février 2006 Auteur Posté 20 Février 2006 Merci Mais la, si je comprend bien, la valeur de la session passe dans l'url non ??
dièse Posté 20 Février 2006 Posté 20 Février 2006 (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é 20 Février 2006 par dièse
steph13 Posté 20 Février 2006 Auteur Posté 20 Février 2006 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
Sonia Gazil Posté 20 Février 2006 Posté 20 Février 2006 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)
steph13 Posté 20 Février 2006 Auteur Posté 20 Février 2006 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)
Sonia Gazil Posté 20 Février 2006 Posté 20 Février 2006 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.
steph13 Posté 20 Février 2006 Auteur Posté 20 Février 2006 Je suis ne plein dedans la 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...
Sonia Gazil Posté 20 Février 2006 Posté 20 Février 2006 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 sessionif ( !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.
steph13 Posté 20 Février 2006 Auteur Posté 20 Février 2006 (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é 21 Février 2006 par steph13
NorSeb Posté 21 Février 2006 Posté 21 Février 2006 Bonjour, Tu as essayé avec $HTTP_SESSION_VARS['login'] ?
steph13 Posté 21 Février 2006 Auteur Posté 21 Février 2006 Je viens de faire un petit test avec $HTTP_SESSION_VARS['login'], sans succès....
dièse Posté 21 Février 2006 Posté 21 Février 2006 (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é 21 Février 2006 par dièse
steph13 Posté 21 Février 2006 Auteur Posté 21 Février 2006 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'erreurif (!isset($_SESSION["uname"])) {session_destroy();header ("location:../page_refus.php");}//redirection vers l'espace membreheader ("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'];}
steph13 Posté 21 Février 2006 Auteur Posté 21 Février 2006 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.
dièse Posté 21 Février 2006 Posté 21 Février 2006 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 , mais comme je ne vois pas non plus ce qui peut ne pas fonctionner dans ton script...
steph13 Posté 21 Février 2006 Auteur Posté 21 Février 2006 (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é 21 Février 2006 par steph13
steph13 Posté 21 Février 2006 Auteur Posté 21 Février 2006 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.
Sonia Gazil Posté 21 Février 2006 Posté 21 Février 2006 Essai de placer un exit après ton header:location. Car sinon, le reste de la page est quand même exectuté (du moins, dans certaines configurations de php).
FrenchKiss Posté 28 Avril 2006 Posté 28 Avril 2006 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 ?
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant