Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/08/2007, 16h01   #1
Futur Membre du Club
 
Homme
Développeur Web
Inscription : mars 2007
Messages : 64
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Tunisie

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2007
Messages : 64
Points : 15
Points : 15
Par défaut [Cookies] Problème de récupération de la session sur un autre script

Salut
j'ai fais une vaingtaine de page, et la session marchait trés bien, mais là ca ne marche plus !
je ne comprend pas pourquoi ! hier ca marchait
dans l'index (page ou j'ai la template et que j'utilise comme cadre avec include pour les autres pages ) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
@session_start();
include("base/connect.php");
if(isset($_POST['disconnect_me']))                 //on vient de l'index pour se                                       deconnecter
{
$_SESSION=array();
session_destroy();
}
 
if(isset($_POST['login']))  // on vien de l'index pour se connecter
{
  $tr=0;
  $l=$_POST['login'];
  $p=$_POST['password'];
  $r=mysql_query("select * from user where login='$l'");
  $re=mysql_fetch_row($r);
  if(strcmp($re[4],$p)==0)          // avec succés
    {
	if($re[13]==1)
	{
	 $tr=1;
     @session_start();
     $l=session_id();
     session_register('identification');
     $_SESSION['identification']=1;
     session_register('user');
     $_SESSION['user']=$re[3];
     $_SESSION['type']=$re[5];
     $_SESSION['nom']=$re[1];
	 $_SESSION['id_u']=$re[0];
	 }
	 else
	 {
	 $tr=5;
	 }
 
    } 
}
puis on a le formulaire de connexion et de deconnexion
la connexion s'etablie trés bien au debut mais dés le passage d'une page a l'autre, la session ne marche plus
visqueu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2007, 16h57   #2
Expert Confirmé
 
Avatar de trotters213
 
Inscription : janvier 2005
Messages : 2 572
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : janvier 2005
Messages : 2 572
Points : 2 605
Points : 2 605

Tu ouvres bien ta session sur chaque page ? Tu n'as pas d'erreur ?

Au lieu d'utiliser des fonctions dépréciées (session_register) utilise les super globales $_SESSION (surtout que c'est ce que tu fais juste après).

Il y a un truc que je ne comprends pas quand tu fais ça :
Code :
1
2
3
4
session_register('identification');
$_SESSION['identification']=1;
session_register('user');
$_SESSION['user']=$re[3];
Tes session_register ne servent à rien puisque juste après tu affectes la même variables avec $_SESSION ??

Dernière chose : tu redémarres ta session dans le if alors que tu la démarres déjà au début de ton code.

Essaie ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
session_start();
require_once 'base/connect.php';
if(isset($_POST['disconnect_me'])) //on vient de l'index pour se deconnecter
{
  $_SESSION=array();
  session_destroy();
}
 
if(isset($_POST['login']))  // on vien de l'index pour se connecter
{
  $tr=0;
  $l=$_POST['login'];
  $p=$_POST['password'];
  $r=mysql_query("select * from user where login='$l'");
  $re=mysql_fetch_row($r);
  if(strcmp($re[4],$p)==0) // avec succés
  {
    if($re[13]==1)
    {
      $tr=1;
      $l=session_id();
      $_SESSION['identification']=1;
      $_SESSION['user']=$re[3];
      $_SESSION['type']=$re[5];
      $_SESSION['nom']=$re[1];
      $_SESSION['id_u']=$re[0];
     }
     else $tr=5;
  } 
}
?>
__________________
Pensez au tag
Les règles du Forum

Dev. Web : FAQ (X)HTML/CSS | Tutos (X)HTML | Tutos CSS

PHP : FAQ PHP | Tutos PHP | Benchmark PHP 5

SQL : Cours SQL
trotters213 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2007, 17h17   #3
Futur Membre du Club
 
Homme
Développeur Web
Inscription : mars 2007
Messages : 64
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Tunisie

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2007
Messages : 64
Points : 15
Points : 15
Par défaut !=

Le probleme n'est pas dans l'identification
elle se passe tres bien, mais pkutot quand je passe de page en page :
j'ai fais l'identification dans l'index....
puis j'ai un include"autrepage.php";
dans l'autre page, je met le @session_start();
puis quand je teste avec print_r($_SESSION) ca me donne Array()
apres quand j'utilise $_SESSION['user'], comme erreur il me donne
Undefined index: user in c:\program files\easyphp1-8\www\hahi\autrepage.php on line 5
!!!!!
merci
visqueu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2007, 17h42   #4
Expert Confirmé
 
Avatar de trotters213
 
Inscription : janvier 2005
Messages : 2 572
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : janvier 2005
Messages : 2 572
Points : 2 605
Points : 2 605
Tu devrais peut-être vérifier qu'à la fin du code que tu nous as donné, $_SESSION existe vraiment et conteint quelque chose (en utilisant un print_r ou un var_dump).

Personne n'aurait modifier php.ini entre temps ?
__________________
Pensez au tag
Les règles du Forum

Dev. Web : FAQ (X)HTML/CSS | Tutos (X)HTML | Tutos CSS

PHP : FAQ PHP | Tutos PHP | Benchmark PHP 5

SQL : Cours SQL
trotters213 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2007, 18h39   #5
Futur Membre du Club
 
Homme
Développeur Web
Inscription : mars 2007
Messages : 64
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Tunisie

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2007
Messages : 64
Points : 15
Points : 15
Par défaut !=

J'ai verifié avec print_r($_SESSION) et ca marche dans l'index
mais même quand j'ai fais un lien de index vers index juste pour essayer, la session disparait !

hier tout allais bien !
pour ce qui est du php.ini, moi j'y ai pas touché , mais qu'est ce que je dois verifier dedans ?
merci
visqueu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2007, 19h12   #6
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Ce n'est pas en faisant précéder session_start de @ que vous trouverez l'erreur : si la création/récupération des sessions est basée sur les cookies et que vous envoyez quoi que ce soit au client avant, le cookie ne sera pas créé et il ne vous sera donc pas possible de récupérer cette même session sur une autre page. De plus, session_register est mal utilisé et déprécié. Choses que trotters213 vous avez corrigé.

Ce qu'il serait intéressant de savoir c'est si votre identifiant de session reste le même à chaque script (echo session_id() par exemple).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 12h50   #7
Futur Membre du Club
 
Homme
Développeur Web
Inscription : mars 2007
Messages : 64
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Tunisie

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2007
Messages : 64
Points : 15
Points : 15
Par défaut !=

j'ai essayé avec le echo(session_id())
et j'en ai mi un a l'index et un dans les autres scripts
il est le même dans l'index que dans l'autre script, mais il change a chaque fois que je raffraichi
et pour ce qui est du php.ini , c'est impossible car j'aai essayé sur un autre pc et c'est le même probleme
merci
visqueu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 13h46   #8
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Avez-vous des messages d'erreur après :
  • vous êtes débarrassé des @ (même temporairement au moyen de commentaires)
  • avoir utilisé la valeur E_ALL pour error_reporting (fonction ou directive éponymes)
?

Envoyez-vous quoi que ce soit au navigateur avant l'appel à session_start ? Quelle est la configuration au niveau des sessions (session.use_trans_sid, session.use_only_cookies et session.use_cookies) ?

PS : avant de chercher à utiliser vos variables de session, un test avec isset serait certainement approprié.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 14h11   #9
Futur Membre du Club
 
Homme
Développeur Web
Inscription : mars 2007
Messages : 64
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Tunisie

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2007
Messages : 64
Points : 15
Points : 15
Par défaut !=

j'ai enlevé les @ et ca me donne ces erreurs :

Citation:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\program files\easyphp1-8\www\hahi\index.php:1) in c:\program files\easyphp1-8\www\hahi\index.php on line 17

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\program files\easyphp1-8\www\hahi\index.php:1) in c:\program files\easyphp1-8\www\hahi\index.php on line 17
Pour le session_start() c'est la premiere ligne de code
seulelment j'utilise des include dans l'index !! il y a des session_start() dans les scripts que j'ouvre dans l'index !!
pour session.use_trans_sid, session.use_only_cookies et session.use_cookies...
j'ai rien fait de cela c'est grave ?
visqueu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 14h25   #10
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par visqueu Voir le message
Pour le session_start() c'est la premiere ligne de code
seulelment j'utilise des include dans l'index !! il y a des session_start() dans les scripts que j'ouvre dans l'index !!
Pour que ce soit plus clair : pourriez-vous illustrer ou nous donner un exemple ?

Qu'est-ce qui figure comme première ligne de index.php ?

Citation:
Envoyé par visqueu Voir le message
pour session.use_trans_sid, session.use_only_cookies et session.use_cookies...
j'ai rien fait de cela c'est grave ?
Je vous demandais les valeurs de ces directives que vous pouvez par exemple trouver dans la sortie de phpinfo. Ce n'est plus nécessaire maintenant puisque nous avons les messages d'erreurs (et une idée de votre configuration)
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 15h45   #11
Futur Membre du Club
 
Homme
Développeur Web
Inscription : mars 2007
Messages : 64
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Tunisie

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2007
Messages : 64
Points : 15
Points : 15
Par défaut !=

pour les include, j'ai un genre de :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
session_start();
?>
<SCRIPT language="javascript">
function verif()
{
}
</SCRIPT>
<?php
include("base-de-donnes.php");
//code de creation de session
//ou code de deconnexion
//formulaire de connexion ...
//ou bouton de deconnexion
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>En cour de construction</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<meta name="description" content="Place web site description here"/>
<meta name="keywords" content="place, keywords, here"/>
<link href="style.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<?php
if(isset($_SESSION['type'])&&$_SESSION['type']=='webmaster')
{
include("page-admin.php");
}
?>
.....</body>
visqueu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 16h29   #12
Expert Confirmé
 
Avatar de trotters213
 
Inscription : janvier 2005
Messages : 2 572
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : janvier 2005
Messages : 2 572
Points : 2 605
Points : 2 605
Je pense qu'elle te demandais si tu faisais un include AVANT de faire le session_start (afin de voir si tu n'affichais rien avant).

Tu as quoi dans ton page-admin.php (tu ne referais pas un session_start dedans) ?

PS : ça n'a rien à voir mais tu as 2 DOCTYPE et ça c'est pas cool
__________________
Pensez au tag
Les règles du Forum

Dev. Web : FAQ (X)HTML/CSS | Tutos (X)HTML | Tutos CSS

PHP : FAQ PHP | Tutos PHP | Benchmark PHP 5

SQL : Cours SQL
trotters213 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 16h48   #13
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Ok j'ai compris. On peut se passer des session_start dans les fichiers inclus puisque le démarrage de la session étant ainsi redondant, PHP émettra un warning (rien de grave en soi).

Par contre à quoi correspond les lignes 1 et 17 de index.php ? Faisons plus simple : gardez les @ retirées ou inopérantes, consultez votre script dans votre navigateur, affichez-en la source. Qu'est-ce qui apparaît avant ces messages d'erreur alors qu'il ne devrait rien y avoir ?
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 17h05   #14
Futur Membre du Club
 
Homme
Développeur Web
Inscription : mars 2007
Messages : 64
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Tunisie

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2007
Messages : 64
Points : 15
Points : 15
Par défaut !=

j'ai enlevé les @ pour les pages incluses , il y en a celles qui ont marché quand j'ai enlevé leurs session_start() et il y en a qui marchent bien comme ca !
il y avait aussi une page ou j'avais du code javascript avant la session_start() portant javascript s'execute coté client !!! quand j'ai mis la sesson_start avant le code tout est remis dans l'ordre
Pour le moment tout va bien mais j'aimerai aussi savoir a quoi servent les fonctions session.use_trans_sid, session.use_only_cookies et session.use_cookies est ce que je dois les fixer ?
(les doctype j'ai aussi un editeur de texte WYSIWYG qui m'oblige a lui mettre ca dtd)
merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
visqueu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 17h26   #15
Expert Confirmé
 
Avatar de trotters213
 
Inscription : janvier 2005
Messages : 2 572
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : janvier 2005
Messages : 2 572
Points : 2 605
Points : 2 605
Citation:
Envoyé par visqueu Voir le message
il y avait aussi une page ou j'avais du code javascript avant la session_start() portant javascript s'execute coté client !!! quand j'ai mis la sesson_start avant le code tout est remis dans l'ordre
Le problème n'est pas que ce soit éxecuter côté client, c'est que tu écris dans la page HTML avant d'ouvrir la session : tu pourrais faire un echo ' '; juste avant ton session_start et ça suffirait pour le faire foirer.
Citation:
Envoyé par visqueu Voir le message
Pour le moment tout va bien mais j'aimerai aussi savoir a quoi servent les fonctions session.use_trans_sid, session.use_only_cookies et session.use_cookies est ce que je dois les fixer ?
ce ne sont pas des fonctions, ce sont des directives PHP. Pour de plus amples explications :
Citation:
Envoyé par visqueu Voir le message
(les doctype j'ai aussi un editeur de texte WYSIWYG qui m'oblige a lui mettre ca dtd)
C'est quoi ton éditeur ? Tu ne peux pas le configurer pour qu'il te mette le bon doctype directement ?
__________________
Pensez au tag
Les règles du Forum

Dev. Web : FAQ (X)HTML/CSS | Tutos (X)HTML | Tutos CSS

PHP : FAQ PHP | Tutos PHP | Benchmark PHP 5

SQL : Cours SQL
trotters213 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 20h53   #16
Futur Membre du Club
 
Homme
Développeur Web
Inscription : mars 2007
Messages : 64
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Tunisie

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2007
Messages : 64
Points : 15
Points : 15
Par défaut !=

j'ai vu la faq, j'ai vu mon php.ini
j'ai compris que je devrai laisser
session.use_cookies =1
et changer
session.use_only_cookies=0
mais j'ai trouvé que j'ai
session.use_trans_sid = 0
je doi la mettre en 1 ?
c'est ca ?
visqueu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 23h26   #17
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Pourquoi vouloir changer votre configuration si tout fonctionne ?

Il y a deux configurations possibles pour faire transiter l'identifiant afin de retrouver sa session :
  • les cookies (session.use_cookies)
  • la réécriture des liens internes (qui est tout aussi valable pour les formulaires) (session.use_trans_sid et session.use_only_cookies)

En résumé :
Pourquoi se limiter aux cookies ? Pour des raisons de sécurité - je ne vais pas m'étendre sur le sujet ceci étant déjà traité de manière plus large dans l'ensemble de nos articles abordant la sécurité - et esthétique (l'identifiant n'est pas visible). Pourquoi activer session.use_trans_sid et désactiver session.use_only_cookies ? Ce n'est intéressant que si vous souhaitez réellement privilégier l'accessibilité au détriment du reste : certaines personnes désactivent les cookies volontairement (bien que généralement on puisse le gérer par whitelist), certains "clients" ne permettent pas de les utiliser (disons ne sont pas prévus pour).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2007, 14h21   #18
Futur Membre du Club
 
Homme
Développeur Web
Inscription : mars 2007
Messages : 64
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Tunisie

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2007
Messages : 64
Points : 15
Points : 15
Par défaut !=

Ca va j'ai bien compris
Merci trotters
Merci julp
a present mon projet est preque fini et c'est grace a vous
visqueu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h10.


 
 
 
 
Partenaires

Hébergement Web