Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
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 07/06/2011, 12h59   #1
Membre habitué
 
Avatar de jlb59
 
Homme J-Luc
Retraité
Inscription : août 2004
Messages : 714
Détails du profil
Informations personnelles :
Nom : Homme J-Luc
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Retraité
Secteur : Industrie

Informations forums :
Inscription : août 2004
Messages : 714
Points : 123
Points : 123
Par défaut Erreur Warning session_start()

Bonjour à tous,

Comme il fallait que je protège l'accès de mon site, étant chez Free, avec htaccess et .htpasswd il y a eu trop de prb, donc, je me suis rabattu sur du php.

J'ai essayé en local et tout était parfait, donc, j'ai transféré !
Et c'est là le hic !
En effet, lorsque j'appelle le site, j'ai bien la demande du login et du pwd, mais quand je valide voilà ce que j'ai
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
Warning: session_start() [function.session-start]: open(/mnt/102/sda/0/2/sabrimi/sessions/sess_c0d9c45888d719dc639a23358d642b10, O_RDWR) failed: No such file or directory (2) in /mnt/102/sda/0/2/sabrimi/templates/auth.php on line 30
 
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/102/sda/0/2/sabrimi/templates/auth.php:30) in /mnt/102/sda/0/2/sabrimi/templates/auth.php on line 30
 
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/102/sda/0/2/sabrimi/templates/auth.php:30) in /mnt/102/sda/0/2/sabrimi/templates/auth.php on line 30
 
Warning: Cannot modify header information - headers already sent by (output started at /mnt/102/sda/0/2/sabrimi/templates/auth.php:30) in /mnt/102/sda/0/2/sabrimi/templates/auth.php on line 36
 
Warning: Unknown(): open(/mnt/102/sda/0/2/sabrimi/sessions/sess_c0d9c45888d719dc639a23358d642b10, O_RDWR) failed: No such file or directory (2) in Unknown on line 0
 
Warning: Unknown(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/mnt/102/sda/0/2/sabrimi/sessions) in Unknown on line 0
A tout hasard voici le code :
index.html
Code :
1
2
3
4
5
6
7
8
9
10
11
<table>
<tr>
<td>Login :</td><td><input name="login" /></td>
</tr>
<tr>
<td>Mot de passe :</td><td><input type="password" name="passwd" /></td>
</tr>
 
<tr><td colspan="2" align="center"><input type="submit" value="Login !"></td></tr>
 
</table>
Et celui des scripts des répertoires :
Config :Templates "auth.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
31
32
33
34
35
36
37
<?php
function CheckUser($login,$md5)
{
  if($login=="xxxxxxxxxxxxi" && $md5=="xxxxxxxxxxxxxxxxxxxxx") // MD5 de xxxxxxx
    return true;
  return false;
}
?>
<?php
if(!isset($_POST['md5']))
{
  header("Location: ../index.html");
  die();
}
$md5=$_POST['md5'];
 
if(!isset($_POST['login']))
{
  header("Location: ../index.html");
  die();
}
$login=$_POST['login'];
 
if(!CheckUser($login,$md5))
{
  header("Location: ../index.html");
  die();
}
 
session_start();
 
$_SESSION['last_access']=time();
$_SESSION['ipaddr']=$_SERVER['REMOTE_ADDR'];
$_SESSION['user']=$login;
 
header("Location: ../index.php");
?>
Templates "auth.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
<?php
include "config/auth-config.php";
 
session_start();
 
if(!isset($_SESSION['last_access']) || !isset($_SESSION['ipaddr']) || !isset($_SESSION['user']))
{
  header("Location: index.html");
  die();
}
 
if(time()-$_SESSION['last_access']>$session_timeout)
{
  unset($_SESSION['last_access']);
  unset($_SESSION['user']);
  unset($_SESSION['ipaddr']);
  header("Location: index.html");
  die();
}
if($_SERVER['REMOTE_ADDR']!=$_SESSION['ipaddr'])
{
  unset($_SESSION['last_access']);
  unset($_SESSION['user']);
  unset($_SESSION['ipaddr']);
  header("Location: index.html");
  die();
}
$_SESSION['last_access']=time();
?>
Et celui dans config :auth-config.php !
Code :
1
2
3
4
5
6
<?php
// Configuration du site
 
// Timeout pour 5 min d'inactivite
$session_timeout=300;
?>
Apparemment, c'est pas le dernier qui gène !

Je vous remercie de votre aide pour me dire ce que je dois faire.

Ah oui, il faut que je précise.
Pour que ça marche bien, j'ai du renommer "login.php" en 'index.html" et pour le site "index.html" en "index.php", pour que la page du login/pwd s'affiche en premier.
__________________
Cordialement.
JLB59

Analyse de la mémoire
jlb59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 13h03   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Hello

Il ne faut RIEN faire avant le session_start. PHP doit envoyer un header spécifique et il ne peut pas le faire s'il à déjà commencé à servir du HTML par exemple.

Ne pas faire:
Code :
1
2
3
4
<html>
  <head>...</head>
  <body><?php session_start(); ?></body>
</html>
Faire:
Code :
1
2
3
4
5
<?php session_start(); ?>
<html>
  <head>...</head>
  <body>...</body>
</html>
Celà vaut également dans le cadre des include: le session_start toujours en premier !
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 13h43   #3
Membre habitué
 
Avatar de jlb59
 
Homme J-Luc
Retraité
Inscription : août 2004
Messages : 714
Détails du profil
Informations personnelles :
Nom : Homme J-Luc
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Retraité
Secteur : Industrie

Informations forums :
Inscription : août 2004
Messages : 714
Points : 123
Points : 123
Citation:
Envoyé par Benjamin Delespierre Voir le message
Hello

Il ne faut RIEN faire avant le session_start. PHP doit envoyer un header spécifique et il ne peut pas le faire s'il à déjà commencé à servir du HTML par exemple.

Ne pas faire:
Code :
1
2
3
4
<html>
  <head>...</head>
  <body><?php session_start(); ?></body>
</html>
Faire:
Code :
1
2
3
4
5
<?php session_start(); ?>
<html>
  <head>...</head>
  <body>...</body>
</html>
Celà vaut également dans le cadre des include: le session_start toujours en premier !
C'est retenu, mais je n'ai pas vu ça !
Parce que le seul script en html est : index.html et pas de session_start en vue !

Pour infos, pour que ça marche, j'ai donc créé un dossiers "sessions" qui lui-même a le fichier .thaccess" (deny from all).
Apparemment, c'est bon ! Je verrais bien avec le temps.

Une petite question quand même, est-ce que c'est obligatoire cette session_start ?
__________________
Cordialement.
JLB59

Analyse de la mémoire
jlb59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 14h28   #4
Membre éclairé
 
Homme
Webmaster
Inscription : septembre 2007
Messages : 376
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Webmaster
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : septembre 2007
Messages : 376
Points : 377
Points : 377
Salut,

la création du dossier sessions est une spécificité de Free Sur d'autres hébergeurs (OVH, 1and1 pour ne citer qu'eux), tu n'a pas besoin de le faire.

Sinon, oui session_start est obligatoire, sinon la session n'est pas créée
Finality est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 14h47   #5
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Je l'avais oublié celle là

Les comptes perso free sont très loin d'être une solution d'hébergement fiable.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 16h19   #6
Membre éclairé
 
Homme
Webmaster
Inscription : septembre 2007
Messages : 376
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Webmaster
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : septembre 2007
Messages : 376
Points : 377
Points : 377
Citation:
Envoyé par Benjamin Delespierre Voir le message
Je l'avais oublié celle là

Les comptes perso free sont très loin d'être une solution d'hébergement fiable.
Oulà oui surtout que Free se réserve le droit de déclarer le site en tant qu'espace de stockage et donc de le virer.

Et puis de nos jours, on a des packs hébergement avec nom de domaine à 30€ par an, c'est vraiment pas excessif ...
Finality est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 20h28   #7
Membre habitué
 
Avatar de jlb59
 
Homme J-Luc
Retraité
Inscription : août 2004
Messages : 714
Détails du profil
Informations personnelles :
Nom : Homme J-Luc
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Retraité
Secteur : Industrie

Informations forums :
Inscription : août 2004
Messages : 714
Points : 123
Points : 123
Citation:
Envoyé par Benjamin Delespierre Voir le message
Je l'avais oublié celle là

Les comptes perso free sont très loin d'être une solution d'hébergement fiable.
Je suppose que tu as raison en disant ça, mais faute de mieux !!!!

Comme je suis chez Free depuis 1998, je n'ai pas cherché d'autres hébergeurs.

Quoiqu'il en soit, tu m'avais donné des explications sur la session_start, je pense que la fin serait "<?php session_end_flush();?>" si le début est "<?php session_start(); ?>", tu veux me dire si c'est ça ?

Merci d'avance.
__________________
Cordialement.
JLB59

Analyse de la mémoire
jlb59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 21h03   #8
Membre éclairé
 
Homme
Webmaster
Inscription : septembre 2007
Messages : 376
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Webmaster
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : septembre 2007
Messages : 376
Points : 377
Points : 377
Pour mettre fin à une session : session_destroy() : http://php.net/manual/fr/function.session-destroy.php
Finality est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 23h16   #9
Membre habitué
 
Avatar de jlb59
 
Homme J-Luc
Retraité
Inscription : août 2004
Messages : 714
Détails du profil
Informations personnelles :
Nom : Homme J-Luc
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Retraité
Secteur : Industrie

Informations forums :
Inscription : août 2004
Messages : 714
Points : 123
Points : 123
Citation:
Envoyé par Finality Voir le message
Pour mettre fin à une session : session_destroy() : http://php.net/manual/fr/function.session-destroy.php
Merci beaucoup de cette précision Finality.
A+
__________________
Cordialement.
JLB59

Analyse de la mémoire
jlb59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 09h39   #10
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Citation:
Quoiqu'il en soit, tu m'avais donné des explications sur la session_start, je pense que la fin serait "<?php session_end_flush();?>" si le début est "<?php session_start(); ?>", tu veux me dire si c'est ça ?
On dirais que tu as confondu session et output buffering

Pour manipuler les sessions, on fait session_start / session_stop
Pour capturer les buffers de sortie on fait ob_start / ob_end_*
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre 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 20h33.


 
 
 
 
Partenaires

Hébergement Web