Gestion des sessions

reman_tmp
Invité n'ayant pas de compte PHPfrance

14 déc. 2005, 23:14

Bonjour à tous,

Je suis débutant en php/mysql et aprés 2 mois d'apprentissage j'ai quelques questions restées sans réponses. J'espère (je suis sur ) que vous pourrez m'aider.

Poue l'instant je travaille en local avec easyPhp avant de mettre mon site en ligne.

Ma préoccupation actuelle est la gestion des sessions PHP, je m'explique :

j'utilises un formulaire de login classique, si l'authentification est correcte je demarre une session par session_start(). J'enregistre plusieurs variables dans ma session comme ceci :

$_SESSION['user'] = $user;
$_SESSION['profil'] = $profil;
etc..

1ere question : est-ce equivalent d'utiliser la fonction session_register("user") par exemple pour enregistrer mes variables ?

2eme question : à la deconnexion de l'utilisateur, j'essaie de detruire la session comme ceci :
$_SESSION = array();
session_destroy();


Ensuite j'envoie un header qui me redirige vers ma page de connexion.
Je que je ne comprends pas c'est que lors d'une reconnexion (sans fermeture du navigateur), c'est le même id de session qui est alloué ??

Dernière question : Sachant qu'un utilisateur peut ne pas autoriser les cookies, il me semble que l'on peut travailler avec un fameux SID (??) dans les URL pour naviguer de page en page. Mais là, j'avoues que je comprends pas du tout comment.

bon ce sera tout pour l'instant mais j'ai bien d'autres questions en reserves surtout concernant la navigation securisé sur un site.


Merci d'avoir lu jusqu'au bout, et merci d'avance pour vos lumières :wink:

Mammouth du PHP | 1776 Messages

14 déc. 2005, 23:37

Bonjour à tous,
Bonjour à toi :wink:
Je suis débutant en php/mysql et aprés 2 mois d'apprentissage j'ai quelques questions restées sans réponses. J'espère (je suis sur ) que vous pourrez m'aider.
On va faire du mieux que l'on peut :wink:
Poue l'instant je travaille en local avec easyPhp avant de mettre mon site en ligne.
C'est nickel
Ma préoccupation actuelle est la gestion des sessions PHP, je m'explique :

j'utilises un formulaire de login classique, si l'authentification est correcte je demarre une session par session_start(). J'enregistre plusieurs variables dans ma session comme ceci :

$_SESSION['user'] = $user;
$_SESSION['profil'] = $profil;
etc..

1ere question : est-ce equivalent d'utiliser la fonction session_register("user") par exemple pour enregistrer mes variables ?
Issu de la doc officielle en frenchy:
Si vous voulez que votre script fonctionne indépendamment de la configuration de la directive register_globals , vous devez utiliser la variable $_SESSION . Tous les éléments de $_SESSION sont automatiquement enregistrés. Si votre script utilise session_register , il ne fonctionnera pas dans les environnements où register_globals est désactivée.
En clair, il vaut mieux utiliser $_SESSION valable pour toute config de php :wink:
2eme question : à la deconnexion de l'utilisateur, j'essaie de detruire la session comme ceci :
$_SESSION = array();
session_destroy();


Ensuite j'envoie un header qui me redirige vers ma page de connexion.
Je que je ne comprends pas c'est que lors d'une reconnexion (sans fermeture du navigateur), c'est le même id de session qui est alloué ??
Il faut également détruire le cookie associé à la session...
Dernière question : Sachant qu'un utilisateur peut ne pas autoriser les cookies, il me semble que l'on peut travailler avec un fameux SID (??) dans les URL pour naviguer de page en page. Mais là, j'avoues que je comprends pas du tout comment.
Je penche pour la config du php.ini :wink:
bon ce sera tout pour l'instant mais j'ai bien d'autres questions en reserves surtout concernant la navigation securisé sur un site.


Merci d'avoir lu jusqu'au bout, et merci d'avance pour vos lumières :wink:
++ @ bientôt

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

14 déc. 2005, 23:46

Salut,
Dernière question : Sachant qu'un utilisateur peut ne pas autoriser les cookies, il me semble que l'on peut travailler avec un fameux SID (??) dans les URL pour naviguer de page en page. Mais là, j'avoues que je comprends pas du tout comment.
regarde un peu la doc pour plus de précisions :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 36 Messages

15 déc. 2005, 09:52

Salut,

Je me suis enregistré donc terminé reman_tmp :wink:

Merci pour vos reponses

Pour detruire la session et le cookie associé je fais donc :
session_start();
setcookie(session_name());
$_SESSION=array();
session_destroy();

// redirection page de login
header("Location:../../index.php");
.... Je retrouve quand même le même id de session à la reconnexion.
A moins que detruire le cookie de la session ne sois pas utile, en fait je m'embete pour rien peut être.

Concernant le SID,
Mon appli ne tournera que sur un intranet, donc j'ai la main sur le serveur et je peux faire un peu ce que je veux :roll: .
Comment dois je donc configurer mon php.ini ?

voici un extrait du php.ini sur les sessions
session.use_cookies = 1
session.name = PHPSESSID // je peux mettre ce que je veux (?)
session.autostart = 0
session.cookie_lifetime = 0
session.use_trans_id = 1 // c'est pas la que tout se joue pour le SID ?
merci @plus

ViPHP
pjl
ViPHP | 2119 Messages

15 déc. 2005, 10:41

Pour détruire une session :
session_start();
session_unset();
session_destroy();

Eléphanteau du PHP | 36 Messages

15 déc. 2005, 19:09

Merci pour la reponse :wink:

Maintenant je passe à un probleme qui, je pense, dois etre bien connu.

J'ai un formulaire d'enregistrement, sur le bouton valider j'execute un script qui m'enregistre tout ca dans mysql, ensuite j'affiche une page qui résume l'enregistrement effectué.

Vous venez de vous enregistré, bla bla bla..

Si la personne rafraichit la page par le navigateur, il réexecute le script et ajoute un nouvel enregistrement dans ma table :?

Faut il gérer ca par un header à la place d'un lien ? ou existe t'il d'autres solutions ?

merci

Mammouth du PHP | 19672 Messages

15 déc. 2005, 23:30

Tu pourrais utiliser une variable de session: à la fin de l'enregistrement, tu modifie la valeur de cette variable. En début de page, tu teste la valeur de la variable : selon la valeur, tu traites l'enregistrement ou non.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 36 Messages

15 déc. 2005, 23:37

Merci beaucoup,
decidement on fait tout avec ces variables de session :D

Mammouth du PHP | 19672 Messages

15 déc. 2005, 23:40

Tout peut-être pas, mais beaucoup de choses pratiques.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1776 Messages

16 déc. 2005, 00:04

Tu pourrais utiliser une variable de session: à la fin de l'enregistrement, tu modifie la valeur de cette variable. En début de page, tu teste la valeur de la variable : selon la valeur, tu traites l'enregistrement ou non.
Voici le tit script que j'avais proposé dans un topic similaire :wink:
http://www.phpfrance.com/forums/voir_re ... .php#84781

Eléphanteau du PHP | 36 Messages

16 déc. 2005, 12:06

merci pour ton script, je m'en suis largement inspiré pour regler ce probleme. J'ai du quand même l'adapter pour qu'il fonctionne sur mon site.
En fait, j'utilises les pseudos frames donc la navigation est gérer sur une seule page principale.
Pour contourner cela j'ai creer un tableau des pages ou le probleme de raffraichissment peut se produire et ensuite je gere de la meme manière que ton script :)



voilà le bout de code adapté :
nb : tous mes liens pointe sur la page principale de mon site. Ces liens sont toujours suivis par le parametre page='mapage' d'ou le $_GET['page'], pour savoir sur quelle page on se dirige
nb : la valeur 'ok' n'a pas d'importance, elle me sert juste à tester le 'isset'
// creation du tableau des pages 'a problemes'
$pages_verif = array ('register.php'=>'ok','valid_form1.php'=>'ok')
);
											
if ((isset($_GET['page'])) && (isset($pages_verif[$_GET['page']]))) {
if (!isset($_SESSION['insere_rec']))$_SESSION['insere_rec'] = rand(1,10000000000);}
merci pour votre aide :merci: [/php]