sylvio Posté 5 Mai 2005 Posté 5 Mai 2005 Salut a tous, Je suis une buse en php et j'aurais besoin d'un petit coup de main. J'ai 3 pages, dans la page 1 j'ai <?session_start(); // on démarre la sessionsession_unset(); // On efface toutes les variables de la sessionsession_destroy(); // Puis on détruit la session$login1 ="toto"; // on definie la variable?> pour creer une session Dans la page 2 ou il y a un formulaire, j'ai <?if ($login=="$login1"){ session_start(); // On démarre la sessionsession_register("login"); // On enregistre le login }else{header('location : page1.php'); } // Sinon l'identification n'est pas réussite?> Et dans la page 3 je veut effacer la variable pour que l'utilisateur ne puisse pas revenir sur le formulaire mais soit rediriger vers la page 1 si il clique sur -precedent- dans son navigateur. <?session_start(); // on démarre la sessionsession_unset(); // On efface toutes les variables de la sessionsession_destroy(); // Puis on détruit la sessionheader("location: page1.php"); // On renvoie ensuite sur la page d'identification?> Bon comme vous vous en doutez, ca ne marche pas, suis-je sur la bonne voie, ou est-ce que je fait n'importe quoi. Et qu'est-ce qui ne va pas Merci de vos infos.
FruitDeFendu Posté 6 Mai 2005 Posté 6 Mai 2005 cest pour une authentification que tu veux utiliser les sessions ?
FruitDeFendu Posté 6 Mai 2005 Posté 6 Mai 2005 je ne suis pas un pro en php mais je ne comprend pas ta 1er page tu n'as pas besoin de faire tout ca! Fait une pages avec ton formulaire <?$login = $_SESSION['session_login'];if ($login != ''){?><form name="form1" method="post" action="connect.php"><input name="login" type="text" value="login"><input name="pass" type="password" value="pass"></form><?}else{echo 'Vous êtes déja authentifie';}?> ta pas connect.php <?session_start(); $login = $_POST['login']; $pass = $_POST['pass']; if ($login != '') { $requete = 'SELECT * FROM membres WHERE pseudo="'.$login.'"'; $reponse = mysql_query($requete); $info = mysql_fetch_array($reponse); if ($pass != $info['pass']){ echo("<script language=\"javascript\">location=\"erreurcon.php\";</script>"); } else { $_SESSION['session_login'] = $login; echo("<script language=\"javascript\">location=\"compte.php\";</script>"); } } else{ echo("<script language=\"javascript\">location=\"erreurcon.php\";</script>"); } regarde par rapport a ce que je te propose! je n'ai pas tester le code mais normallement tout devrait fonctionner. et tu n'as pas besoin d'effacer les variables pour qu'il ne puisse pas avoir acces au formulaire! un simple if fait l'affaire.
Elentar Posté 6 Mai 2005 Posté 6 Mai 2005 1/ On ne détruit pas une session à chaque fois qu'on la lance, sinon ça pert beaucoup de son intérêt :-° session_start suffira donc 2/ Pour qu'une variable soit une variable de session, la meilleure manière de procéder est d'utiliser l'array superglobal $_SESSION (cf. code à FruitDeFendu), et pas les session_register & cie Et bien sûr, si on définit une simple variable comme tu fais : $login1 ="toto"; elle ne se transmettra pas. 3/ La syntaxe correcte pour le header Location est : Location: page1.php (et encore, normalement il faudrait une URI absolue) Bon courage
YannCo Posté 16 Mai 2005 Posté 16 Mai 2005 Salut à tous, ça tombe bien. Ce n'est peut être pas la meilleur méthode mais je galère un peu avec ça. j'appele un fichier qui vérifie la session pour chaque page du site multi sous-domaine session_set_cookie_params(0, '/', '.best.net', false);session_start(); la première ligne je l'ai trouvé sur un forum, elle me permet de garder le même PHPSESSID sur l'ensemble des sous-domaines. Le pb, c'est que je n'ai pas de session, enfin la valeur de $_COOKIE['PHPSESSID'] reste vide quant on arrive sur le site. J'utilise une base pour y mettre toute les sesions en cours sur le site, membres, visiteurs, et même mon pote google et ses potes, le hic vu qu'elle reste vide, c'est qu'un visiteur qui se connecte en tant que membre ne me permet pas de supprimer le visiteur qu'il était avant de se connecter dans la base. effectivement j'utilise ce SID pour le retrouver, j'avais bien pensé à tester l'IP mais dans le cas de plusieurs membres qui sont sur le même réseau (même IP) ça cause problème. En fait, pourquoi cette SID est vide à la conexion ?
Anonymus Posté 17 Mai 2005 Posté 17 Mai 2005 A la connexion, ton serveur ne connait pas encore l'internaute. Il lui attribue une Id de session, qui lui servira à la seconde page. Il te faut donc gérer les sessions lorsque l'utilisateur arrive sur le site, pour la première fois (par exemple.).
YannCo Posté 17 Mai 2005 Posté 17 Mai 2005 Il te faut donc gérer les sessions lorsque l'utilisateur arrive sur le site, pour la première fois (par exemple.). <{POST_SNAPBACK}> Là, j'ai du mal à te suivre j'ai bien compris que l'id de session était donné à l'arrivé sur le site et qu'elle sert donc au chargement de la deuxieme page, je l'avais plus ou moins déduis mais là, merci, c'est de l'affirmatif, cependant je ne sais pas et ne vois pas comment gérer ta solution.
Anonymus Posté 19 Mai 2005 Posté 19 Mai 2005 Au début de ton script, tu mets session_start(). Ensuite, tu testes si l'utilisateur est 'loggé', (a une session), ou pas. S'il n'est pas loggé, rien ne t'empeche de lui attribuer une session 'vide', par exemple. Ainsi, ensuite, tu n'as plus qu'à gérer le cas où la personne est 'loggée, avec un identifiant null. Tu peux également faire ainsi : Lorsque la personne se connecte, si les variables envoyées par le formulaire de connexion est ok, alors tu enregistres les variables de session, puis tu fais un header("location:..) sur la page d'accueil, en disant : 'ok, t'es bien loggé'. Le fait d'envoyer un header, et donc de faire une redirection, aura pour conséquence que le programme prendra en compte, après la redirection, les sessions nouvellement créées. As tu compris ? Anonymus.
YannCo Posté 19 Mai 2005 Posté 19 Mai 2005 Au début de ton script, tu mets session_start(). Ensuite, tu testes si l'utilisateur est 'loggé', (a une session), ou pas. S'il n'est pas loggé, rien ne t'empeche de lui attribuer une session 'vide', par exemple.Ainsi, ensuite, tu n'as plus qu'à gérer le cas où la personne est 'loggée, avec un identifiant null. Merci de ton aide, j'avance dans ette fichu idntification mais tout n'est pas parfait. Si je comprend bien, le visiteur arrive, une session est créé mais non utilisable tant qu'on n'a pas ouvert une nouvelle page, donc je test si cette personne a une id de session(si il vient de se connecter la session est null), si il n'en a pas, je lui en créé une temporaire (une chaine unique) me permetant de l'inscrire dans ma table de session (utilisateurs en ligne, visiteurs, membres, robots) et à la prochaine ouverture de page, je fais un update qui remplace la chaine temporaire par la valeur de sa session. Au niveau de la connexion du membre, c'est bon du moment qu'il a une id de session, chose qu'il n'avais pas forcément, mais avec cette idée je pense pouvoir gérer le problème, meme si ça fait encore des lignes de codes en plus, je trouve que ça fait au final un fichier bien compliqué de gérer ses visiteurs et membres ... mais bon. En tout cas merci, je ne sais pas si ce que j'ai compris était bien ce que tu essayais de me dire mais ça me donne une idée
YannCo Posté 19 Mai 2005 Posté 19 Mai 2005 Mouai, y a rien qui va, c'est de pire en pire de plus en plus de code, de plus en plus de condition pour un résultat toujours insatisfesant. Je vais tout recommencer à zéro en commenssant par Que lorsque que l'on arrive sur le site puis que je cha,ge de page je ne crééb pas un second visiteur dans ma base de données.
YannCo Posté 19 Mai 2005 Posté 19 Mai 2005 Si ça intéresse quelqu'un : YES J'y suis arrivé, j'ai ce que je veux, quelques p'tits détails à perfectionner mais ça marche
Anonymus Posté 19 Mai 2005 Posté 19 Mai 2005 Au niveau de la connexion du membre, c'est bon du moment qu'il a une id de session, chose qu'il n'avais pas forcément, mais avec cette idée je pense pouvoir gérer le problème, meme si ça fait encore des lignes de codes en plus, je trouve que ça fait au final un fichier bien compliqué de gérer ses visiteurs et membres ... mais bon. En fait, la gestion de l'espace membre est un passage obligé de tout site un tantinet complexe/intéressant. C'est vrai que ca rajoute du code, mais ce n'est pas compliqué, c'est juste un peu plus complexe. Une fois le mécanisme acquis, après, c'est du gateau, c'est applicable à tous les cas, et tu coderas tout ca beaucoup plus vite. Non, sincèrement, logger les membres, c'est très peu de code. J'ai un fichier, externe (que je mets en include), qui cherche à savoir si la personne appartient au groupe de membres inscrits, et le formulaire classique. C'est tout. Le tout en include, et que je peux transposer dans tous programmes (en fait, j'en fais un différent à chaque fois, mais bon.. c'est histoire de gout ) Bon courage pour la suite, mais au fait.. : Comment as tu fais, alors ?
YannCo Posté 20 Mai 2005 Posté 20 Mai 2005 Bon ça me parait un peu "non conventionel" mais ça marche, au lieu de détailler ce que j'ai fait avec des phrases je vous pose mon code, désolé ça fait un peu long mais si vous avez des remarques, suggestions, coreections ... ça permetra de l'améliorer ainsi il pourra servir de base à ceux qui se lance dans cette aventure <?phpsession_set_cookie_params(0, '/', '.domaine.com', false);session_start();$agent = $HTTP_SERVER_VARS['HTTP_USER_AGENT'];$adresseip = $HTTP_SERVER_VARS['REMOTE_ADDR'];$page = $HTTP_SERVER_VARS['SERVER_NAME'].$HTTP_SERVER_VARS['REQUEST_URI'];$id_session = $_COOKIE['PHPSESSID'];require_once 'config.php'; // connexion base de données$sel_sess = "select * from table_session";if(!$id_session){ $chaine = str_shuffle("abcdefghijklmnopqrstuvwxyz0123456789"); $_SESSION['id_tmp'] = substr($chaine,0,14); $id_session = $_SESSION['id_tmp']; if((isset($HTTP_COOKIE_VARS['C_id'])) && ($HTTP_COOKIE_VARS['C_id'] > 0)) { $C_login = $HTTP_COOKIE_VARS['C_login']; $C_pass = $HTTP_COOKIE_VARS['C_pass']; $C_id = $HTTP_COOKIE_VARS['C_id']; $verif = mysql_query("select id_user,login, mdp from table_user where login = '".$C_login."' and mdp = '".$C_pass."'") or die(mysql_error()); if(mysql_num_rows($verif)) { $row_verif = mysql_fetch_assoc($verif); $_SESSION['S_user'] = $row_verif['id_user']; $insert_session = mysql_query("insert into table_session ( id_user, id_session, ip_user, agent_user, s_lastactivity, s_lastvisit, page ) values ( ".$row_verif['id_user'].", '".$id_session."', '".$adresseip."', '".$agent."', ".time().", ".time().", '".$page."' )"); include 'F_user.php'; // récup des infos sur l'utilisateur } } else { $insert_session = "insert into table_session ( id_user, id_session, ip_user, agent_user, s_lastactivity, s_lastvisit, page ) values ( 0, '".$id_session."', '".$adresseip."', '".$agent."', ".time().", ".time().", '".$page."' )"; $run = mysql_query($insert_session) or die (mysql_query()); }}if((!isset($_SESSION['id_tmp'])) || ($_SESSION['id_tmp'] <> $id_session)){ if($_SESSION['S_user']) { $update_session = mysql_query("update table_session set id_user = ".$_SESSION['S_user'].", id_session = '".$id_session."', agent_user = '".$agent."', s_lastactivity = ".time().", page = '".$page."' where id_session = '".$id_session."'") or die (mysql_error()); include 'F_user.php'; } else { if(($_SESSION['id_tmp']) && (!$_COOKIE['PHPSESSID'])) { $update_session = mysql_query("update table_session set id_user = 0, id_session = '".$id_session."', agent_user = '".$agent."', s_lastactivity = ".time().", page = '".$page."' where id_session = '".$_SESSION['id_tmp']."'") or die (mysql_error()); } else { $update_session = mysql_query("update table_session set id_user = 0, id_session = '".$id_session."', agent_user = '".$agent."', s_lastactivity = ".time().", page = '".$page."' where id_session = '".$id_session."'") or die (mysql_error()); } }}include 'robots.php'; // gestion des robots?> la connexion : if (isset($_POST['login'])){ $loginUsername=$_POST['login']; $password=$_POST['password']; $sql_query = "SELECT login, mdp, id_user FROM table_user WHERE login='".$loginUsername."' AND mdp='".$password."'"; $run_sql = mysql_query($sql_query,$Connect) or die(mysql_error()); $loginFoundUser = mysql_num_rows($run_sql); if ($loginFoundUser) { $user = mysql_fetch_assoc($run_sql); $id = $user['id_user']; $login = $user['login']; $pass = $user['motpass']; if($_POST['saveme'] == 'on') { setcookie("C_id", $id, time()+3600*12*52*100,"/", ".domaine.com"); setcookie("C_login", $login, time()+3600*12*52*100,"/", ".domaine.com"); setcookie("C_pass", $pass, time()+3600*12*52*100,"/", ".domaine.com"); } session_register(auth); $_SESSION['S_user'] = $id; if($_COOKIE['PHPSESSID']) { $id_session = $_COOKIE['PHPSESSID']; } else { $id_session = $_COOKIE['C_id_tmp']; } $sel_sess_user = "select * from tabler_session where id_session = '".$id_session."'"; $req_sess_user = mysql_query($sel_sess_user)or die(mysql_error()); $update_sess = mysql_query("update table_session set id_user = ".$id.", s_lastactivity = ".time().", id_session = '".$id_session."', ip_user = '".$HTTP_SERVER_VARS['REMOTE_ADDR']."', agent_user = '".$HTTP_SERVER_VARS['HTTP_USER_AGENT']."' where id_session = '".$id_session."'") or die(mysql_error()); $update_user = mysql_query("update table_user set last_activity = '".time()."' where id_user = ".$id.""); ?><script>location='redir.php';</script><?php }}
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant