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 13/08/2008, 11h43   #1
Invité de passage
 
Inscription : août 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 3
Points : 0
Points : 0
Par défaut session_start() et session_regenerate_id()

Bonjour à tous,
J'ai un petit probleme de header pour pas changer quand je boss sur les sessions....
Alors j'utilise les sessions dans le cadre d'un panier pour e-commerce que je suis en train de developpez.
La page qui me pose probléme est la page de login client.

D'abord l'erreur
Citation:
Warning: session_regenerate_id() [function.session-regenerate-id]: Cannot regenerate session id - headers already sent in /homepages/7/d203016977/htdocs/dev/vitrine/vitrine/inc_session.php on line 10
Ensuite le code de la section sur le script session
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
function openSession($userid) {
// Connexion à MySQL
	mysql_connect("", "", "");
	mysql_select_db("");
// On supprime la session en cours
	mysql_query("DELETE FROM site_session WHERE userid = $userid");
// Re-génération du sid
	session_regenerate_id();
// On insère le nouvel id de session dans la db
	mysql_query("INSERT INTO site_session (sid, userid, ip, browser) VALUES ('".session_id()."', '$userid', '123.3.3.2', 'IE6')");
	$_SESSION['userid']=$userid;
	return TRUE;
}
et maintenant le code de la page login.php
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
session_start();
require_once 'inc_session.php';
if (isset ($_SESSION['userid']))
{
openSession($_SESSION['userid']);
$view = 'bonjour et bienvenue';
}
else
{
$view ='<form action="login.php" method="post" name="login" target="_self">';
$view .='<input name="username" type="text" value="Votre login" size="10" />';
$view .='<input name="password" type="text" value="Votre mdp" size="10" />';
$view .='<input name="action" type="hidden" value="login" />';
$view .='<input name="login" type="submit" value="Vous connectez" />';
$view .='</form>';
}
if ($_POST['action'] == login)
{
 
	if (empty($_POST['username']) && $_POST['password']) 
		{
		echo "erreur d'identification, veuillez recommencer";
		}
	else 
		{
		loginCheck($_POST['username'],$_POST['password']);
		}
}
 
?>
Voilà je cherche un peu partout mais je ne vois pas comment ne pas faire un session_start en début de mon script login.php étant donné que je test les variables de sessions.

En fait pour bien comprendre, lorsqu'un client se promène et fait des achats sur le site, une session et un caddie temporaire sont créer, à la fin de ses achats il a le choix de s'identifier si il dispose déjà d'un compte soit de s'en créer un.
C'est pour cela qu'il y a un test sur la page login pour savoir si le client possède déjà une session temporaire et un panier afin de pouvoir les enregistrer par la suite dans sa nouvelle session identifié.

Merci de toute aide qui pourra me permettre d'avancer ^^
Merci pour l'edit c'est plus propre - Je ne vous ai pas mis tout le code du script session car apres c'est juste la fonction qui test si le couple username et password sont correct.
bap-niinou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2008, 12h02   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 383
Points : 16 383
Citation:
je ne vois pas comment ne pas faire un session_start en début de mon script
Le session_regenerate_id(); peut se faire apres le session_start();
Il n'y a rien entre les deux qui pourrait expliquer que les en-têtes soient déjà traitées ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2008, 12h26   #3
Invité de passage
 
Inscription : août 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 3
Points : 0
Points : 0
Y'a t'il une incidence si les entêtes html sont encore présent à la suite du script? dans l'ordre logique le serveur va d'abord exécuter le script et ensuite lire le html vu que le script est avant le code HTML? J'ai laissé les entêtes html pour pouvoir faire valider ma page, sinon il me causé sans cesse l'erreur sur le W3C
Sinon je ne génère le header nul par ailleurs, je fais juste appel à session_start puis après session-regenerate-id.
bap-niinou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2008, 12h37   #4
Expert Confirmé
 
Avatar de Eusebe
 
Inscription : mars 2006
Messages : 1 989
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : mars 2006
Messages : 1 989
Points : 3 606
Points : 3 606
Bonjour,

cela ne viens pas des balises HTML que tu as après.

Par contre, cela peut venir de caractères parasites dans ton fichier inc_session.php. Vérifies que tu n'as pas d'espace avant <?php et ne ferme pas la balise php (cela évite de se retrouver avec des espaces ou des retours à la ligne à la fin du fichier )
Eusebe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2008, 12h46   #5
Invité de passage
 
Inscription : août 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 3
Points : 0
Points : 0
J'ai bien vérifié, je n'ai pas d'espace avant l'ouverture de ma balise php, j'ai également supprimé la balise de fin ?> mais le problème persiste.

Je comprends pas, quand je testais en local je n'avais pas de problème, dés que je suis passé sur le live ça l'a fait, pourtant j'ai pas de restrictions sur l'affichage des erreurs sur mon serveur de dev.

Bon faut dire que j'étais parti avec la fonction PDO mais elle n'est pas prise en charge correctement sur mon hébergement, donc j'ai du recoder à la va vite avec les connections classiques à Mysql, j'ai peut être fait une erreur du coup en modifiant le code, mais je ne vois vraiment pas ou....
bap-niinou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h05.


 
 
 
 
Partenaires

Hébergement Web