Aller au contenu

besoin d'aide sessions php


Sujets conseillés

Posté

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 session
session_unset(); // On efface toutes les variables de la session
session_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 session
session_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 session
session_unset(); // On efface toutes les variables de la session
session_destroy(); // Puis on détruit la session

header("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 :wacko:

Merci de vos infos.

Posté

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.

Posté

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 ;)

  • 2 semaines plus tard...
Posté

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 ?

Posté

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.).

Posté
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 :blink: 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.

Posté

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.

Posté
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 :P

Posté

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.

Posté

Si ça intéresse quelqu'un : YES :D J'y suis arrivé, j'ai ce que je veux, quelques p'tits détails à perfectionner mais ça marche :D

Posté
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 ?

Posté

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

<?php
session_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
}
}

Veuillez vous connecter pour commenter

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



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