OVH Cloud OVH Cloud

Variables de Session

14 réponses
Avatar
Shewy80
Bonjour à tous.

J'ai un problème avec mes variables de session.
J'ai fait 3 pages bidon, qui envoie les variables de l'une à l'autre.

J'ai fait tester ces pages par un ami les fonctionnent bien.
Chez moi rien qui marche.

Pouvez vous m'aider ??
J'utilise EasyPHP.

voici le contenu de mes 3 pages :
session1.php >> session2.php >> session3.php

//-------------------------session1.php---------------------
<?php
session_start();

$_SESSION['host'] = 'localhost' ;
$_SESSION['pass'] = 'icilemotdepasse' ;
$_SESSION['db'] = 'baseas1' ;

echo "<br> Saisie de l'utilisateur : <br>";

echo "<form action='session2.php' method='post'>";
echo "<input type='' name='user' value='as1'>";
echo "<input type='submit' value='valider'>";
echo "</form>" ;

//Avec ce lien : ça marche ! mais j'en veux pas
//echo '<br /><a href="session2.php?' . SID . '">page 2</a>';

?>

//-------------------------session2.php---------------------
<?php
session_start();

$_SESSION['user']=$_POST['user'];

echo " <b><u> Données de connexion a Mysql : </u></b> <br>";

echo "host = {$_SESSION['host']} <br>\n ";
echo "user = {$_SESSION['user']} <br>\n ";
echo "pass = {$_SESSION['pass']} <br>\n ";
echo "db = {$_SESSION['db']} <br>\n ";

// connection à la DB NE PAS MODIFIER !
////////////////////////////////////////////////////////////////////////////
/////////////////
// $link = mysql_connect ($host,$user,$pass) or die ('Erreur :
'.mysql_error() ); ////
// mysql_select_db($db) or die ('Erreur :'.mysql_error());

echo "<a href='session3.php'><br>passer à la page suivante";

?>

//-------------------------session3.php---------------------
<?
session_start();

echo "host = {$_SESSION['host']} <br>\n ";
echo "user = {$_SESSION['user']} <br>\n ";
echo "pass = {$_SESSION['pass']} <br>\n ";
echo "db = {$_SESSION['db']} <br>\n ";

session_destroy();

?>

10 réponses

1 2
Avatar
dmetzler
Regarde dans ton php.ini que les cookies de session sont activés

; Whether to use cookies.
session.use_cookies = 1

Ensuite, vérifies que ton navigateur accepte les cookies (au moins
pour ce site)

Sinon, ton code devrait marcher. En revanche, c'est pas top de mettre
la chaine de connexion à la base de données en session (y compris le
mot de passe). Tu ferais mieux de faire un fichier et de l'inclure par
un include au début de chaque fichier.

Les sessions sont faite pour conserver des données propres à la
session (ca parait évident comme ça !). Or ta chaine de connexion à
la base de données est propre au serveur.
Avatar
Shewy80
voilà ayé ça marche !
un grand merci à toi. En effet IE accepte pas les cookies

par contre tu peux m'expliquer plus précisement comment faire ma connexion
alors si ce n'est pas dans les pages ?

JE dois gérer plusieurs utilisateurs par la suite.



"" a écrit dans le message
de news:
Regarde dans ton php.ini que les cookies de session sont activés

; Whether to use cookies.
session.use_cookies = 1

Ensuite, vérifies que ton navigateur accepte les cookies (au moins
pour ce site)

Sinon, ton code devrait marcher. En revanche, c'est pas top de mettre
la chaine de connexion à la base de données en session (y compris le
mot de passe). Tu ferais mieux de faire un fichier et de l'inclure par
un include au début de chaque fichier.

Les sessions sont faite pour conserver des données propres à la
session (ca parait évident comme ça !). Or ta chaine de connexion à
la base de données est propre au serveur.


Avatar
Michael Alves
voilà ayé ça marche !
un grand merci à toi. En effet IE accepte pas les cookies

par contre tu peux m'expliquer plus précisement comment faire ma connexion
alors si ce n'est pas dans les pages ?

JE dois gérer plusieurs utilisateurs par la suite.


Dans un config.db.inc par exemple, tu définis des constantes :

define('DATABASE',"TA BASE") ;
define('HOST', '127.0.0.1') ;
define('USER', 'TON USER') ;
define('PASSWORD', 'TON PASS') ;

Puis, dans chaque page tu inclus ton config.db.inc :

require "config.db.inc" ;

Avatar
John GALLET
require "config.db.inc" ;


YES !! Cracker's Paraside is back !
http://lesite.com/config.db.inc et à moi les mots de passe en clair !

Arretez ces CONNERIES de ".inc" partour, ON S'EN BRANLE que ce soit un
fichier inclus, ce qui est important, c'est une extension PARSEE PAR PHP,
surtout s'il y a des données confidentielles dedans.
--> config.php

a++;
JG

Avatar
FAb
John GALLET writes:

require "config.db.inc" ;


YES !! Cracker's Paraside is back !
http://lesite.com/config.db.inc et à moi les mots de passe en clair !

Arretez ces CONNERIES de ".inc" partour, ON S'EN BRANLE que ce soit un
fichier inclus, ce qui est important, c'est une extension PARSEE PAR PHP,
surtout s'il y a des données confidentielles dedans.
--> config.php


config.inc.php ?

Et pis DBconnector.class.php ?

FAb


Avatar
Sebastian 'CrashandDie' Lauwers
John GALLET wrote:

Arretez ces CONNERIES de ".inc" partour, ON S'EN BRANLE que ce soit un
fichier inclus, ce qui est important, c'est une extension PARSEE PAR PHP,
surtout s'il y a des données confidentielles dedans.


Je suis d'accord, le simple .inc n'est pas suffisant, et complètement
con... Autant les sauvegarder en .txt...

--> config.php


Parcontre, j'aime bien utiliser les machin.inc.php ... C'est sans doute
parceque je suis un mauvais codeur php, mais j'ai cependant l'impression
que cela permet une plus grande clareté.

De telle manière, je sais que je dois empêche un .inc.php d'être ouvert
par autrechose que un script du server. On ne peut pas y accéder par un
navigateur en tappant l'adresse:

<http://www.monserver.com/monscript.inc.php>

Tout simplement, parceque à chaque .inc.php je rajoute un petit

if (!defined ('MACONSTANTE') OR constant ('MACONSTANTE') != 'purée à la
fraise')
die ('Hahaha, owned');

Même si c'est un fichier de configuration où l'on ne fait que de la
déclaration de variables (par exemple pour la connexion au server sql,
ou autre), il n'est pas nécessaire d'utiliser une telle chose puisque la
déclaration de variable ne montre rien au client.

Enfin, si t'as quelquechose à dire, je serai heureux d'être éduqué (non,
pas la ceinture ;).

a++;


Best regards,

JG


S.

Avatar
Michael Alves
require "config.db.inc" ;



YES !! Cracker's Paraside is back !
http://lesite.com/config.db.inc et à moi les mots de passe en clair !

Arretez ces CONNERIES de ".inc" partour, ON S'EN BRANLE que ce soit un
fichier inclus, ce qui est important, c'est une extension PARSEE PAR PHP,
surtout s'il y a des données confidentielles dedans.
--> config.php


Hum, c'était à titre d'exemple. J'ai pour habitude de les mettre dans
un dossier protégé par un .htaccess, après si c'est le moyen le plus
propre ou pas je ne sais pas en tout cas je répond A LA QUESTION QU'IL
POSE. (il me semble o_O)


Avatar
John Gallet
Bonjour,


Parcontre, j'aime bien utiliser les machin.inc.php ... C'est sans doute
parceque je suis un mauvais codeur php, mais j'ai cependant l'impression
que cela permet une plus grande clareté.


Tout à fait, les conventions de nommage, tant des variables que des
fichiers, apportent de la facilité de lecture. Enfin, essaient de...
Maintenant je te donne un exemple de construction classique : j'ai un
seul fichier "public", index.php, et je fais un switch selon la variable
$action (attention pour les neu² qui traînent, j'ai PAS DIT
require($action), SURTOUT PAS). Donc à part index.php, ***TOUS*** mes
fichiers sont appelés par require. A QUOI ça sert que je rajoute ".inc."
dans leur nom ?

De telle manière, je sais que je dois empêche un .inc.php d'être ouvert
par autrechose que un script du server. On ne peut pas y accéder par un
navigateur en tappant l'adresse:
<http://www.monserver.com/monscript.inc.php>
Tout simplement, parceque à chaque .inc.php je rajoute un petit
if (!defined ('MACONSTANTE') OR constant ('MACONSTANTE') != 'purée à la
fraise')
die ('Hahaha, owned');


Si cette convention de nommage te permet de te souvenir que ce sont des
fichiers "privés" (qui donc, sur le fond, devraient carrément être **en
dehors** de DOCUMENT_ROOT) alors n'hésite pas à l'utiliser. Toute
convention de nommage n'a d'utilité qu'humaine. Moi j'ai d'autres
conventions de nommage qui me permettent aussi de savoir instantanément
si c'est un fichier public ou privé, mais en effet, pourquoi pas
celle-ci, mais il faudrait que ce soit explicite alors, je sais pas moi,
config.priv.php ou config.priv_inc.php car .inc. ne fait pas penser à
"fichier non public" mais à "fichier appelé par require qq part".

Sur le fond, il faudrait :
- mettre tous ces fichiers "privés" dans un (sous) répertoire (en
ajoutant un index.html vide).
- y coller un .htacess <DENY FROM ALL> pour être peinard sous apache
- faire le test sur une constante que tu décris pour rester compatibles
en termes de sécurité hors apache, dans tous les fichiers qui ne sont
pas des librairies (perso, je ne mélange jamais les librairies qui
définissent des fonctions et constantes des fichiers qui exécutent
réellement du code).


Même si c'est un fichier de configuration où l'on ne fait que de la
déclaration de variables (par exemple pour la connexion au server sql,
ou autre), il n'est pas nécessaire d'utiliser une telle chose puisque la
déclaration de variable ne montre rien au client.


Toutafé, ce qui définit d'un côté, ce qui exécute ailleurs. Là en effet,
il n'est pas "utile" de faire la vérif sur la constante définie (au
sens, ça prend une ligne de code <?php if(!defined("MACONSTANTE"))
exit(); ?> mais si on la mettait pas, on ne risquerait rien, enfin pour
le moment).

a++;
JG

Avatar
Sebastian 'CrashandDie' Lauwers
John Gallet wrote:

Bonjour,


Re,

Tout à fait, les conventions de nommage, tant des variables que des
fichiers, apportent de la facilité de lecture. Enfin, essaient de...
Maintenant je te donne un exemple de construction classique : j'ai un
seul fichier "public", index.php, et je fais un switch selon la variable
$action (attention pour les neu² qui traînent, j'ai PAS DIT
require($action), SURTOUT PAS). Donc à part index.php, ***TOUS*** mes
fichiers sont appelés par require. A QUOI ça sert que je rajoute ".inc."
dans leur nom ?


Je récapitule:

- Le fait de rajouter .inc. dans le nom, ou tout autre notation n'est
pas nécessaire, elle est juste utile, pour certains codeurs. Passer
outre n'est qu'une question de choix ou de religion personnelle.

Si cette convention de nommage te permet de te souvenir que ce sont des
fichiers "privés" (qui donc, sur le fond, devraient carrément être **en
dehors** de DOCUMENT_ROOT) alors n'hésite pas à l'utiliser. Toute
convention de nommage n'a d'utilité qu'humaine. Moi j'ai d'autres
conventions de nommage qui me permettent aussi de savoir instantanément
si c'est un fichier public ou privé, mais en effet, pourquoi pas
celle-ci, mais il faudrait que ce soit explicite alors, je sais pas moi,
config.priv.php ou config.priv_inc.php car .inc. ne fait pas penser à
"fichier non public" mais à "fichier appelé par require qq part".

Sur le fond, il faudrait :
- mettre tous ces fichiers "privés" dans un (sous) répertoire (en
ajoutant un index.html vide).
- y coller un .htacess <DENY FROM ALL> pour être peinard sous apache
- faire le test sur une constante que tu décris pour rester compatibles
en termes de sécurité hors apache, dans tous les fichiers qui ne sont
pas des librairies (perso, je ne mélange jamais les librairies qui
définissent des fonctions et constantes des fichiers qui exécutent
réellement du code).


Perso, je n'ai pas encore eu d'expériences professionelles suffisantent
pour me permettre de travailler sur un serveur de production sur lequel
j'ai un accès *plus* complèt. Pour ainsi dire, les seuls serveurs autres
que mon mien sur ma box cachée au fond de mon cercueil, je n'ai
travaillé que sur free. Mettre des fichiers hors du DOCUMENT_ROOT m'est
donc un peu plus difficile. La technique du dossier qui contient les
scripts appellés par require (), je l'utilise régulièrement, le
index.htm vide je l'utilise depuis que j'utilise des ftp pour éviter les
dossiers "ouverts", et le .htaccess, je l'utilise régulièrement, pas
systématiquement, loin de là, uniquement quand l'utilité s'en fait
ressentir. Erreurs, sans doute, manque de pratique, nul doute.

J'ai la grande chance (lisez: trop petite expérience?) de n'avoir pas
travaillé sur des projets assés importants pour nécessiter une sécurité
draconnienne, et mes collaborateurs m'ont souvents épargnés ces
problèmes pour me laisser me détruire mes 3 neurones sur l'algorythmie
(mmorpg).

[...]

a++;
JG


S.

Avatar
John GALLET
Je récapitule:
- Le fait de rajouter .inc. dans le nom, ou tout autre notation n'est
pas nécessaire, elle est juste utile, pour certains codeurs. Passer
outre n'est qu'une question de choix ou de religion personnelle.
Excellente synthèse, j'aime bien la "religion", c'est à peu près ça,

j'ajouterais donc que dans certains cas, des gourous autoproclamés qui pnt
rarement codé plus de 10 lignes dans les 10 derniers mois tentent et sont
payés pour imposer aux dévelopeurs leurs conventions de nommage ça
s'appelle des "responsables qualité", ça cause "merise" ou "uml",
"modélisation", "N-tiers", "TCO", etc...
Blague à part, si on arive dans une équipe de dev qui possède déjà des
normes de nommage, il faut les respecter, même si on pense qu'elles sont
débiles^W améliorables.

J'ai la grande chance (lisez: trop petite expérience?) de n'avoir pas
travaillé sur des projets assés importants pour nécessiter une sécurité
draconnienne, et mes collaborateurs m'ont souvents épargnés ces
problèmes pour me laisser me détruire mes 3 neurones sur l'algorythmie
(mmorpg).
Faut bien commencer qq part, et surtout, glaner de l'expérience auprès

des autres en gardant un esprit critique.

a++;
JG

1 2