IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Perte de session


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Août 2010
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business

    Informations forums :
    Inscription : Août 2010
    Messages : 216
    Par défaut Perte de session
    Bonjour à tous,

    Après avoir parcouru maintes et maintes forum j'y vais aussi de mon post.

    En effet j'ai une gestion de secteur sur mon site Internet grâce à des sessions sauf que je perds ma session systématiquement.

    Sur le principe, mon secteur apparait dans mon url et je lance des tests pour définir ma session.
    Quand le secteur est dans l'url tout fonctionne sauf que dès qu'il n'apparait plus dans l'url la session ne fonctionne pas.

    Pour faire plus simple voici mon code php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    // Il s'agit de la durée au-delà de laquelle des données de session seront considérées comme périmées.
    ini_set("session.gc_maxlifetime","3600");
    // Si cette option est égale à 1, alors PHP ignorera les identifiants transmis via l'url pour n'utiliser que ceux contenus dans les cookies.
    ini_set("session.use_only_cookies","1");	
     
    session_start();
     
    /********************************************
     *			GESTION SECTEURS				*
     ********************************************/
    // on récupére le secteur selectionné par le navigateur
     
    if (!isset($_SESSION['villeID'])) {
     
     
    	if ( (isset($_GET['ville'])) && (!empty($_GET['ville'])) ) {
     
     
    	$villeName				=  (isset($_GET['ville'])) ? trim($_GET['ville']) : null;
    	$villeName				=  mysql_real_escape_string($villeName);
     
    		$sqlQueryList			=
    			" SELECT * ".
    			" FROM VILLE_LIST ".
    			" WHERE VILLE_NAME LIKE '$villeName'".
    			" ORDER BY VILLE_ID ASC LIMIT 0,1"; 
    			$reqList 			= mysql_query($sqlQueryList);
    			$reqVilleResult		= mysql_fetch_array($reqList);
     
    			if (!empty($reqVilleResult['VILLE_ID'])) { 
     
    			$idSecteur 			= $reqVilleResult['VILLE_ID'];
    			$_SESSION['villeID']	= $reqVilleResult['VILLE_ID'];
     
    			}  else {
    			$idSecteur 		= 4;
    			} 
     
    	}  else {
     
    	$idSecteur 		= 1; 
     
    	}
     
    } elseif (isset($_SESSION['villeID'])) {
     
    	$idSecteur = (isset($_SESSION['villeID'])) ? trim($_SESSION['villeID']) : null;
     
    	if(!empty($idSecteur) && ctype_digit($idSecteur)) {
    	$idSecteur				=  intval($idSecteur);
    	}			
     
    }
    Mon navigateur gère bien les cookies et ne les bloque pas.

    Voici ce que dit phpinfo sur les sessions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    Session Support	enabled
    Registered save handlers	files user sqlite
    Registered serializer handlers	php php_binary wddx
     
    Directive	Local Value	Master Value
    session.auto_start	Off	Off
    session.bug_compat_42	On	On
    session.bug_compat_warn	On	On
    session.cache_expire	180	180
    session.cache_limiter	nocache	nocache
    session.cookie_domain	no value	no value
    session.cookie_httponly	Off	Off
    session.cookie_lifetime	0	0
    session.cookie_path	/	/
    session.cookie_secure	Off	Off
    session.entropy_file	no value	no value
    session.entropy_length	0	0
    session.gc_divisor	100	100
    session.gc_maxlifetime	1440	1440
    session.gc_probability	0	0
    session.hash_bits_per_character	4	4
    session.hash_function	0	0
    session.name	PHPSESSID	PHPSESSID
    session.referer_check	no value	no value
    session.save_handler	files	files
    session.save_path	/tmp	/tmp
    session.serialize_handler	php	php
    session.use_cookies	On	On
    session.use_only_cookies	Off	Off
    session.use_trans_sid	0	0
    Et voici une ligne de mon .htaccess :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # Interdiction des sessions dans l'url :
    SetEnv SESSION_USE_TRANS_SID 0
    Une âme charitable pour m'aider ?
    D'où peut venir mon problème ?

    Merci par avance,

    Aurélien

  2. #2
    Membre confirmé
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Août 2010
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business

    Informations forums :
    Inscription : Août 2010
    Messages : 216
    Par défaut
    Bonjour à tous,

    Je continue de chercher une solution mais en vain.

    Existe t'il une autre solution pour mettre ma session dans un cookie ?

    Aurélien

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Voila qui parait bien compliqué !
    Veux tu dire
    1) que tu es en local
    2) que tu utilises des ALIAS URL/NOM de DOMAINE
    peux tu clarifier ceci merci.

    La norme serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    [Session]
    session.save_handler = files
    session.use_cookies = 1
    session.use_only_cookies = 1
    session.name = PHPSESSID
    session.auto_start = 0
    session.cookie_lifetime = 0
    session.cookie_path = /
    session.cookie_domain =
    session.cookie_httponly =1
    session.serialize_handler = php
    session.gc_probability = 1
    session.gc_divisor = 1000
    session.gc_maxlifetime = 1440
    session.bug_compat_42 = On
    session.bug_compat_warn = On
    session.referer_check =
    session.entropy_length = 0
    session.entropy_file =
    session.cache_limiter = nocache
    session.cache_expire = 180
    session.use_trans_sid = 0
    session.hash_function = 0
    session.hash_bits_per_character = 5

  4. #4
    Membre confirmé
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Août 2010
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business

    Informations forums :
    Inscription : Août 2010
    Messages : 216
    Par défaut
    Merci pour ta réponse.

    Je ne suis pas en local.

    Voici l'adresse de mon site :
    http://www.dusk.fr/Paris/magazine.html

    Mon site propose une navigation par ville.
    Quand on fait le choix d'une ville dans la pré-home, on clique sur un lien qui amène sur une home page pour une ville donnée.

    Une fois sur cette home page, je fais un GET pour récupérer le nom de la ville, je vérifie qu'elle existe bien dans ma base puis je définie l'ID de ma ville dans une session.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    if (!isset($_SESSION['villeID'])) {
     
     
    	if ( (isset($_GET['ville'])) && (!empty($_GET['ville'])) ) {
     
     
    	$villeName				=  (isset($_GET['ville'])) ? trim($_GET['ville']) : null;
    	$villeName				=  mysql_real_escape_string($villeName);
     
    		$sqlQueryList			=
    			" SELECT * ".
    			" FROM VILLE_LIST ".
    			" WHERE VILLE_NAME LIKE '$villeName'".
    			" ORDER BY VILLE_ID ASC LIMIT 0,1"; 
    			$reqList 			= mysql_query($sqlQueryList);
    			$reqVilleResult		= mysql_fetch_array($reqList);
     
    			if (!empty($reqVilleResult['VILLE_ID'])) { 
     
    			$idSecteur 			= $reqVilleResult['VILLE_ID'];
    			$_SESSION['villeID']	= $reqVilleResult['VILLE_ID'];
     
    			}  else {
    			$idSecteur 		= 4;
    			}
    A chaque nouvelle page je vérifie que la session existe bien, si ce n'est pas le cas je la redéfinie via mon GET + nom de ma ville.

    Seulement voila, j'ai des url (toujours pour une ville donnée) qui ne contient pas le nom de la ville (donc pas de possibilité de faire un GET + nom de ma ville).

    http://www.dusk.fr/video/Grégoire-l-interview_7.html

    C'est à ce moment là que je me rend compte que je n'ai pas de session active puisque mon site est alors dirigé vers une ville par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    }  else {
     
    	$idSecteur 		= 1; 
     
    	}
    Le fait d'avoir mes sessions dans mon url me posait des problèmes pour mon référencement donc j'ai opté pour des sessions dans un cookie.

    Dans mon htaccess
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # Interdiction des sessions dans l'url :
    SetEnv SESSION_USE_TRANS_SID 0
    Seulement, quand je navigue de cette page :
    http://www.dusk.fr/Paris/magazine.html
    à celle là
    http://www.dusk.fr/video/Grégoire-l-interview_7.html
    je me rends bien compte que ma session ne fonctionne pas ou n'est pas prise en compte.

    Du coup je ne vois pas d'où peut venir le problème.

    Aurais-tu une idée ?

    Merci encore pour ton aide.

    Aurélien

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ok je vois,
    Retires ce que tu as mis dans le .htaccess, c'est dangeureux, car il créera
    un cookies différent par répertoire, ou même ne marchera pas.
    Ton php.ini devrait créer un cookies de session par domaine un point c'est tout !

    Bien entendu dans TOUT tes PHP (sauf les php destinés a un include bien sur
    tu doit mettre collé en haut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    session_start();
    //=========aucun autre paramétre !!
    ensuite OK utilises tes sessions
    $lieu = (isset($_SESSION['lieu'])) ? $_SESSION['lieu'] : '';
     
    ?>

  6. #6
    Membre confirmé
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Août 2010
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business

    Informations forums :
    Inscription : Août 2010
    Messages : 216
    Par défaut
    Merci.

    J'ai retiré le code de mon .htaccess mais ça ne fonctionne toujours pas.

    Est-ce que mon code de gestion de session en php te parait correct ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    session_start();
     
    /********************************************
     *			GESTION SECTEURS				*
     ********************************************/
    // on récupére le secteur selectionné par le navigateur
     
    if (!isset($_SESSION['villeID'])) {
     
     
    	if ( (isset($_GET['ville'])) && (!empty($_GET['ville'])) ) {
     
     
    	$villeName				=  (isset($_GET['ville'])) ? trim($_GET['ville']) : null;
    	$villeName				=  mysql_real_escape_string($villeName);
     
    		$sqlQueryList			=
    			" SELECT VILLE_ID , VILLE_NAME ".
    			" FROM VILLE_LIST ".
    			" WHERE VILLE_NAME LIKE '$villeName'".
    			" ORDER BY VILLE_ID ASC LIMIT 0,1"; 
    			$reqList 			= mysql_query($sqlQueryList);
    			$reqVilleResult		= mysql_fetch_array($reqList);
     
    			if (!empty($reqVilleResult['VILLE_ID'])) { 
     
    			$_SESSION['villeID']	= $reqVilleResult['VILLE_ID'];
    			$idSecteur 				= $_SESSION['villeID'];
     
    			}  else {
    			$idSecteur 		= 4;
    			} 
     
    	}  else {
     
    	$idSecteur 		= 1; 
     
    	}
     
    } elseif (isset($_SESSION['villeID'])) {
     
    	$idSecteur = (isset($_SESSION['villeID'])) ? trim($_SESSION['villeID']) : null;
     
    	if(!empty($idSecteur) && ctype_digit($idSecteur)) {
    	$idSecteur				=  intval($idSecteur);
    	}			
     
    }
    Car il me définit donc à priori il ne reconnait pas de session.

    Merci beaucoup.

    Aurélien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JSP][session] perte de session et sendRedirect
    Par blaz dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 30/03/2007, 09h32
  2. Perte de Session d'une page à l'autre
    Par Flam dans le forum Langage
    Réponses: 3
    Dernier message: 15/03/2006, 14h34
  3. [Struts]Redirection globale en cas de perte de session
    Par Mercenary Developer dans le forum Struts 1
    Réponses: 10
    Dernier message: 03/02/2006, 14h40
  4. [navigateur]Problême de pertes de sessions sous IE (.js)
    Par Invité4 dans le forum Général JavaScript
    Réponses: 26
    Dernier message: 21/11/2005, 17h53
  5. [VB.NET] Perte de session entre 2 projets
    Par TekP@f dans le forum ASP.NET
    Réponses: 3
    Dernier message: 02/05/2005, 09h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo