Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Vash SD
    Registrato dal
    Sep 2006
    Messaggi
    502

    Session_id() sempre diverso?

    Ho una domanda, ma credo di sapere già la risposta.

    Se io apro le sessioni nel mio sito e salvo quelle, ad esempio, del login, ho una chiave univoca, la mia session_id(), che si riferisce alla mia macchina. Questa chiave, però, io la salvo nel database, nella tabella delle sessioni. Ma se 500 miliardi di persone facessero il login non c'è possibilità che le chiavi univoche possano essere uguali?

    Naturalmente, se lo fossero, dovrei aprire e chiudere le session sino a che non ne avessi una completamente nuova.

    Aspetto delucidazioni

    Grazie di tutto,
    Vash
    Personal Home Page

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Preoccupati prima di raggiungere tale numero di utenti, umani e alieni compresi

  3. #3
    Originariamente inviato da RoTeam
    Preoccupati prima di raggiungere tale numero di utenti, umani e alieni compresi


    Per popolazione mondiale si intende il numero di esseri umani viventi sulla Terra in una data definita. Si stima che al 31 ottobre 2011 la popolazione mondiale abbia raggiunto la soglia di sette miliardi di abitanti.
    Azzolina... pensa se pagassero anche solo 10 cent per l'iscrizione....

    @Vash SD

    Scherzi a parte, non e' poi cosi' buona l'idea di usare il session_id come chiave primaria. Le sessioni scadono e quel valore servira' solo piu' per un buffo puffo scolorito.

    E quindi si dovranno gestire e/o cancellare/aggiornare. La corrispondente chiave del session_id sta sul pc dell'utente in un cookie di sessione e che potrebbe cancellarla, modificarla, regalarla etc etc...

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Originariamente inviato da RoTeam
    Preoccupati prima di raggiungere tale numero di utenti, umani e alieni compresi
    ahahahahah stupenda questa!


    @vash

    se salvi le session nel db, ti serve niente di più (immagino) per gestire la session e la sua validità nel tempo etc etc...

    ora, googlando ho trovato un paio di risposte interessanti:

    Session_id can indeed be duplicated, but the probability is very low. If you have a website with a fair traffic, it may happens once in your web site life, and will just annoy one user for one session.

    This is not worth to care about unless you expect to build a very high traffic website or a service for the bank industry.
    e

    It's not very unique as shipped. In the default configuration it's the result of a hash of various things including the result of gettimeofday (which isn't terribly unique), but if you're worried, you should configure it to draw some entropy from /dev/urandom, like so

    ini_set("session.entropy_file", "/dev/urandom");
    ini_set("session.entropy_length", "512");
    search for "php_session_create_id" in the code for the actual algorithm they're using.

    Edited to add: There's a DFA random-number generator seeded by the pid, mixed with the time in usecs. It's not a firm uniqueness condition especially from a security perspective. Use the entropy config above.
    http://stackoverflow.com/questions/1...php-session-id

    dipende da quanto devi essere certo che l'id di sessione sia univoco in un dato momento e allora applichi le scelte più opportune.

    Quindi: puoi mettere nel db la chiave primaria al session_id e nel tuo codice ti assicuri di gestire il fatto che se 1 volta nella vita tale session_id è duplicato, allora ne venga generato un altro e salvarlo etc... insomma, per garantirsi la unicità dell'id, non puoi mettere le mani sul fuoco ogni volta che crei un id univoco, però diciamo che ce le puoi mettere mooooolto vicino. A meno che, come dici tu, non hai qualche milione di visitatori univoci al giorno (e ti chiami facebook/google/etc e quindi paghi qualcuno per risolverti questi problemi) o devi fare dei sistemi altamente critici, puoi andare a letto tranquillo

    EDIT: conta che l'entropia di dev/unrandom fa pena in caso di macchine virtuali, allora dovresti applicare sistemi per la generazione di entropia da installare sulla macchina
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    Utente di HTML.it L'avatar di Vash SD
    Registrato dal
    Sep 2006
    Messaggi
    502
    Ahahah scusate se ho esagerato, ma naturalmente era giusto per rendere l'idea, cosa che penso io non abbia, comunque, fatto.

    Quello che volevo dire e che Santino ha capito perfettamente è che se 500 miliardi di persone si connettessero, non insieme, e registrando per ognuno il proprio session_id() potrebbe capitare la possibilità. anche se distantissima, di avere due session_id() uguali.

    Ho pensato allora a questa soluzione:

    Codice PHP:
    do {
        
    session_destroy();
        
        
    session_start();
                
        
    $sid session_id();
        
    $_SESSION['id'] = $this->id;
        
    $_SESSION['login'] = 1;
        
    $time time();
                    
        
    db mysql_connect("$hostname_db","$username_db","$password_db") or die ("Connessione non riuscita: " mysql_error());    
        
    mysql_select_db("$database_db"$db);
        
    $query "SELECT sid FROM `".TABLE_SESSION."` WHERE sid = '$sid'";
        
    $result mysql_query($query);
        
    $row mysql_fetch_array($result);
                    
    } while (
    $row); 
    Una sorta di:
    Codice PHP:
    session_start();
    echo 
    session_id();

    session_destroy();
        
    session_start();
    echo 
    session_id(); 
    Così dovrebbero essere diversi i session_id(), ma testando non lo sono
    Quindi mi domando se allora sia inutile il controllo.
    Personal Home Page

  6. #6
    sei sempre sullo stesso browser. Se vuoi cambiare l'id lo devi rigenerare altrimenti rimarra' lo stesso poiche' sul browser l'id non sara' scaduto e quindi verra' ripreso rivalidando il precedente. Un conto e svuotare il file di sessione un altro e' cambiare l'id di sessione.

    Codice PHP:
    session_start();
    session_regenerate_id();
    echo 
    session_id(); 

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it L'avatar di Vash SD
    Registrato dal
    Sep 2006
    Messaggi
    502
    Aahh, quella funzione non la conoscevo. Pensavo che distruggendo e riaprendo cambiasse il session_id(). Beh, ragazzi, siete favolosi, grazie ancora!
    Personal Home Page

  8. #8
    Originariamente inviato da Vash SD
    Aahh, quella funzione non la conoscevo. Pensavo che distruggendo e riaprendo cambiasse il session_id(). Beh, ragazzi, siete favolosi, grazie ancora!
    disabilita tutti i cookie sul browser e vedrai che la sessione cambiera'.

    Avviso: la vita della sessione di php si gioca su due fronti: client e server.

    Ci sara' una scadenza lato browser (cookie) ed una per inattivita' lato server. Se non chiudi il browser cancellando i cookie di sessione questa viene recuperata anche se scaduta lato server purche' non sia stata spazzata via dal garbage collector. Parliamo del session_id().

    Questo per dire che se intendi usare le sessioni su db lascia perdere le sessioni del php. Mi pare che (parecchi) anni fa il buon GM (moderatore) avesse scritto un articolo proprio sulle sessioni alternative. Se la trovo ti mettero' il link. Anche se relativa ad una vecchia release del php la traccia rimane la stessa.

    eccolo: http://www.html.it/articoli/sessioni...tive-in-php-1/

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.