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 :

Modifier l'id de session PHPSESSID


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 142
    Points : 56
    Points
    56
    Par défaut Modifier l'id de session PHPSESSID
    Bonjour,

    Je souhaiterai modifier l'id de session, génerer automatiquer, par un n° Id que j'aurai moi mème géneré !

    Savez vous comment faire ?

    Je sais generer un id, je sais utiliser les session mais je ne sais pas modifier le n°id du cookie PHPSESSID.

    voila la fonction que j'avai ecri ! pensant que fonctionnerait !

    ma fonction:
    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
    function  regenerer_id(){  
     
    	// génération d'un prefix aléatoire
        $randval = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        $random = "";
     
        for ($i = 1; $i <= 3; $i++) {
            $random .= substr($randval, rand(0,(strlen($randval) - 1)), 1);
        }
     
    	$newid = md5(uniqid($random).rand(100, 9990)); // géneration du nouvel id avec uniqid + prefix + N°aléatoire et cryptage MD5
     
    	session_id($newid); // AJOUT du nouvel ID ! ne fonctionne pas !
     
    	return $newid;
    }
    Le nouvel id ne s'ajoute pas a PHPSESSID mais cependant quand je fais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo session_id($newid);
    il m'affiche bien mon nouvel ID !!

    Le problème vien de la Merci beaucoup

  2. #2
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    .....Pq veux-tu changer le numéro de session, pour finalement utiliser une fonction qui fera un ID quasi-identique à celui généré par le serveur ?

    PS : qu'est ce qu'il fait, ton id_session ? Fonction perso ? Parce que à priori, elle existe pas....

    Voila un extrait du manuel, sur une fonction "session_regenerate_id" :

    <?php
    session_start();

    $old_sessionid = session_id();

    session_regenerate_id();

    $new_sessionid = session_id();

    echo "Ancienne session: $old_sessionid<br />";
    echo "Nouvelle session: $new_sessionid<br />";

    print_r($_SESSION);
    ?>
    Peut-être intéressant pour toi :

    http://fr2.php.net/manual/fr/functio...enerate-id.php

    Y a d'autres exemples

    EDIT :

    Plutot ca :

    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
     
    <?php
     
    function sessie_regenerate_id() {
        $randlen = 32;
        $randval = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        $random = "";
        for ($i = 1; $i <= $randlen; $i++) {
            $random .= substr($randval, rand(0,(strlen($randval) - 1)), 1);
        }
        // use md5 value for id or remove capitals from string $randval
        // $random = md5($random);
        if (session_id($random)) {
            return true;
        } else {
            return false;
        }
    }
    if (!function_exists("session_regenerate_id")) {
        sessie_regenerate_id();
    } else {
        session_regenerate_id();
    }
     
    ?>
    C'est dans le manuel, posté par quelqu'un....

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 142
    Points : 56
    Points
    56
    Par défaut
    merci pour ta reponse

    deja dsl je voulais mettre session_id();

    j'ai deja vu tous ces exemples ou manuels. Je voudrais créer ma propre fonction car je voudrais etre sur que l'id est bien unique ! d'ou l'utilisation de la fonction uniqid() !

    Je ne suis pas certain que la fonction session_regenerate_id(); certifie que l'id retourné est bien unique.

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Et surtout appeler session_id($my_id) avant même session_start (ce que vous n'avez pas évoqué). Il va sans dire que session.auto_start doit être à Off (valeur recommandée).

    Edit : PHP génère en temps normal un hash (MD5 ou SHA1 suivant la configuration) de la "date du jour" (fonction gettimeofday).

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 142
    Points : 56
    Points
    56
    Par défaut
    oui c'est ce que j'avais remarqué juste apres

    bon en fait plus bas dans les commentaires de session_regenerate_id(); quelqu'un donne ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function session_regenerate_id() {
                $tv = gettimeofday();
                $buf = sprintf("%.15s%ld%ld%0.8f", $_SERVER['REMOTE_ADDR'], $tv['sec'], $tv['usec'], php_combined_lcg() * 10);
                session_id(md5($buf));
                if (ini_get('session.use_cookies'))
                    setcookie('PHPSESSID', session_id(), NULL, '/');
                return TRUE;
            }
    donc c'est plus ou moin la fonction que j'étais en train de faire !

  6. #6
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Citation Envoyé par Stouille89
    merci pour ta reponse

    deja dsl je voulais mettre session_id();

    j'ai deja vu tous ces exemples ou manuels. Je voudrais créer ma propre fonction car je voudrais etre sur que l'id est bien unique ! d'ou l'utilisation de la fonction uniqid() !

    Je ne suis pas certain que la fonction session_regenerate_id(); certifie que l'id retourné est bien unique.
    Et bien il me semble que si....

    Il me semble avoir lu quelque part que la probabilité de retour du même ID était telle qu'on pouvait considérer que l'ID était unique....

    Mais bon, 2 précautions valent mieux qu'une !!!

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 142
    Points : 56
    Points
    56
    Par défaut
    Ok je confirme que session_regenerate_id() fournit un id unique puisqu'il le genere en fonction du l'heure actuel en milisecondes et de l'adresse IP de l'utilisateur puis d'autres paramètres...

    Hors le principe pour génerer soi mème un id unique est qu'il faut utiliser uniqid() (qui utilise d'heure courante en miliseconde) avec un préfixe aléatoire puis crypter le tout avec MD5.

    Merci :-)

  8. #8
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Voili voilou....

    Fort instructif tout ceci

    De rien, à plus

    PS : il doit être interessant de faire soit-même ses ID de sessions lorsque des critères particuliers sont à prendre en compte, notamment le stockage en BDD, ou alors avoir ses propres règles de session....

    Mais il va sans dire que je pense que les paramètres serveur suffisent et vont bien dans 98% des cas..... (Il faut pas réinventer la roue non plus.... )

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 142
    Points : 56
    Points
    56
    Par défaut
    je ne réinvente pas la roue puisque le principe y est, je me contante juste de l'adapter ............ la roue

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

Discussions similaires

  1. Modifier le délai de session
    Par hedgehog dans le forum IIS
    Réponses: 7
    Dernier message: 12/06/2009, 08h58
  2. Modifier l’accès a une session
    Par bonbino dans le forum Windows XP
    Réponses: 3
    Dernier message: 21/07/2008, 11h37
  3. Réponses: 2
    Dernier message: 30/10/2007, 18h46
  4. modifier une variable de Session
    Par mouvma dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 12/09/2007, 17h20
  5. [JSP] [Javascript] Modifier une variable de Session
    Par fady005 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 05/04/2007, 11h48

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