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 :

Impossible d'ouvrir une session sous IE et Safari


Sujet :

Langage PHP

  1. #1
    Membre actif
    Avatar de Emyleen
    Femme Profil pro
    Webmaster
    Inscrit en
    Mars 2010
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 150
    Points : 230
    Points
    230
    Par défaut Impossible d'ouvrir une session sous IE et Safari
    Bonjour,

    Je viens poster ici car je me trouve face à un cas assez spécial (et bizarre je trouve).

    J'ai créé un site auquel on accède via un code qui contient les données de connexion.

    Lorsque j'ouvre le site sous Firefox 11, Google Chrome 17, Opéra 11, la connexion s'effectue et fonctionne bien (pas de souci de login, les données sont ok).

    Mais lorsque j'effectue la même manipulation sous IE 9 ou Safari 5... Il redirige vers la page de login en indiquant qu'aucune session n'est ouverte ce qui n'est pas logique puisque justement le code entré permet d'ouvrir la session...

    J'avoue que là je ne comprend pas, je vais essayer de vider le cache et tout mais franchement c'est un cas très bizarre....
    Quelqu'un aurait une idée du pourquoi du comment?

    Merci ^^

  2. #2
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 242
    Points : 354
    Points
    354
    Par défaut
    Un petit bout de code serait-il le bienvenue ?

  3. #3
    Membre actif
    Avatar de Emyleen
    Femme Profil pro
    Webmaster
    Inscrit en
    Mars 2010
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 150
    Points : 230
    Points
    230
    Par défaut
    Voici ma fonction d'ouverture de session

    Code php : 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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    function ouvertureSession($login,$password){
    		//Si les champs ont été remplis
    		if($login && $password) {
    			$login = strip_tags($login);
    		    $password = strip_tags($password);
    			$loginSession = explode('.',$login);
    			//Récupération du nom de la BD spécifique
    			$sql = "SELECT NomBd FROM Bases WHERE Code = :code
    					OR NomBd = :nomBd";
    			$instance = Connection::GetInstance(); 	//Connexion BD Routeur
    			$stmt = $instance->prepare($sql);
     
    			$stmt->bindParam(':code', $loginSession[0]);
    			$stmt->bindParam(':nomBd', $loginSession[0]);
    			$stmt->execute();
     
    			$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
     
    			//Utilisateur trouvé dans la BD Routeur
    			if(count($result) > 0) {
    				$bd = $result[0]['NomBd'];
    				$login = $loginSession[1];
    				//Si le login ET le mot de passe existent en BD
    				//Vérification si le login et le mot de passe existent en BD
    				$sql = "SELECT *
    						FROM Utilisateurs
    						WHERE Login = :login AND Password = :password";
    				//Exécution de la requête
    				$instance = Connection::GetInstance($bd);
    				$stmt = $instance->prepare($sql); 	// Préparation de ton statement
     
    				$stmt->bindParam(':login', $login);
    				$stmt->bindParam(':password', $password);
    				$stmt->execute();
    				$utilisateur = $stmt->fetchAll(PDO::FETCH_ASSOC);
     
    				//Utilisateur non trouvé dans la BD spécifique
    				if(count($utilisateur) == 0 || $utilisateur[0]['Droits'] == 0) {
    					header("Location: /login.php?error=noRights");
    				}
     
    				//Création d'une nouvelle session
    				$this->idSession = $this->getLastID($bd)+1;
     
    				//On sauve les données de session du client
    				$_SESSION['Session']['ip_client'] = $_SERVER['REMOTE_ADDR']; 
    				$_SESSION['Session']['Droits'] = $utilisateur[0]['Droits'];
    				$_SESSION['Session']['idSession'] = $this->idSession;
    				$_SESSION['Session']['Nom'] = $utilisateur[0]['Nom'];
    				$_SESSION['Session']['Prenom'] = $utilisateur[0]['Prenom'];
    				$_SESSION['db']['bdname'] = $bd;
     
     
    				//Sauvegarde de la session
    				date_default_timezone_set('Europe/Paris');
    				$date = date("Y-m-d H:i:s");
    				$this->save($login,$date, $_SERVER['REMOTE_ADDR']);
     
    				//Renvoi sur l'index
    				if(strcmp($login,'SPICloud') != 0){
    					header("Location: /catalogue/index.php");
    				}
    				else if(isset($_POST['codeSPICloud'])){
    					header("location: /cloud/index.php?code=".$_POST['codeSPICloud']);
    				}
    				else if(isset($_GET['code'])){
    					//header("location: /cloud/index.php?code=".$_GET['code']);
    				}
    			}
    			else {
    				//Utilisateur inconnu
    				//Renvoi sur la page de login avec une erreur
    				header("Location: /login.php?error=loginError");
    			}
    		}
    		else {
    			//Champs vides
    			//Renvoi sur la page de login avec une erreur
    			header("Location: /login.php?error=emptyFields");
    		}
    	}

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Points : 1 638
    Points
    1 638
    Par défaut
    Ca fonctionne peut-être comme ca mais pour tester l'existance d'une variable tu devrais plutot utiliser isset() ou !empty() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(isset($login) && isset($password)) { ... } else { ... }
    Je suis étonné de voir aussi que la fonction header te retourne pas un warning vu que normalement cette fonction doit se trouver en tout début de page (redirection js à la place ?).

    Après dans ces cas là, je mettrais des ptit debugs à des endroits .. genre juste quand tu entres dans ta conditions IF (voir si tu y rentres bien ...) et en sortie de ta requête SQL (peut-être foireuse ?).

    M'enfin IE est toujours plus stricte que les autres ...

  5. #5
    Membre actif
    Avatar de Emyleen
    Femme Profil pro
    Webmaster
    Inscrit en
    Mars 2010
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 150
    Points : 230
    Points
    230
    Par défaut
    Merci je vais tester tout ça, je vais essayer de mettre des echos un peu partout.

    Ce qui m'étonne c'est surtout que ça ne plante que sur ie...ça n'a peut être aucun rapport mais sur mon serveur distant, lorsque j'accède à mon site, il apparait en mode Quirks sous IE, alors qu'en local il apparait bien en compatibilité IE9.
    J'ai lu que c'était une question d’entête HTML, voici la mienne :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <!--[if lte IE 9]>
      <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->
    Pensez-vous que cela ai un lien avec mon ouverture de session? Apparemment il ne me créerai même pas la variable $_SESSION...

    Edit : Après test il s'avère que sous IE il me vide la variable session lorsque je fais mon header.... Comment pallier à cela? Existe-t-il un autre moyen de faire des redirections en php?

    Edit 2 : En rajoutant ce bout de code après mon session_start(), ça me permet de corriger le bug pour IE, mais pas pour Safari
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');
    Une autre idée?

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Points : 1 638
    Points
    1 638
    Par défaut
    Surement parce que un header doit se trouver en tout début et IE est peut-être plus strict que les autres sur cela.

    Tu peux faire une redirection en js aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    echo"<SCRIPT LANGUAGE=\"JavaScript\">document.location.href=\"path_page\" </SCRIPT>";
    ?>
    Ensuite, tu mets un doctype html5 (enfin tu veux html5 ?)
    Et en suivant tu mets une ligne xhtml

    Pour HTML 5:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <!DOCTYPE html>
    <HTML>
     <HEAD>
    	<meta http-equiv="Content-type" content="text/html; charset=UTF-8"/>	
    </HEAD>
    <BODY>
    </BODY>
    </HTML>

  7. #7
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Il faut rajouter un point d'arrêt (stopper le script) après chaque header('Location: ...'), sinon c'est source de bogue.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    header('Location: une_page.php');
    exit();

    On ne voit pas vraiment où la session démarre, le session_start() ?
    C'est dans la méthode save() ?


    Je ne parviens pas à comprendre ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //Création d'une nouvelle session
    $this->idSession = $this->getLastID($bd)+1;
    On dirait que ce serait toi qui accorderait un identifiant de session ?
    C'est Php qui le fait normalement.

    Au feeling comme, ça, l'ouverture d'une session et l'identification de l'internaute n'en ferait qu'1.
    Si c'est le cas à mon avis il y a erreur, mais je peux me tromper.
    Question comme ça : Est il possible (ou prévu) d'avoir une session pour une personne non identifiée ?

Discussions similaires

  1. impossible d'ouvrir une session sous XP
    Par roland pageon dans le forum Windows XP
    Réponses: 1
    Dernier message: 16/12/2008, 13h27
  2. impossible d'ouvrir une session sous vista
    Par zanskar dans le forum Windows Vista
    Réponses: 11
    Dernier message: 29/02/2008, 14h23
  3. Réponses: 2
    Dernier message: 08/11/2007, 21h12
  4. [SQLSERV 2005] Impossible d'ouvrir une session
    Par slim dans le forum MS SQL Server
    Réponses: 15
    Dernier message: 20/02/2007, 14h42
  5. [Sécurité] Impossible d'ouvrir une session
    Par clementphp dans le forum Langage
    Réponses: 7
    Dernier message: 10/05/2006, 23h35

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