Pagina 2 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 34

Discussione: sesioni senza biscotti

  1. #11
    tutti fanno degli errori ^^
    Chiamatemi sven se volete non ho voglia di fare una nuova email per una nuova registrazione xD
    Mac Future User , Ventilatore for PC Cooler user , - dry is coming -

  2. #12
    maLOOOL

    allora ... partendo dal fatto che i cookie sono UTILISSIMI per parecchia roba, soprattutto quando lavori con javascript, per gestire le sessioni preferisco anch'io lavorare in GET

    le sessioni funzionano su un principio molto semplice: se non fai nulla per un TOT di secondi vuol dire che non stai più navigando sul sito!

    Ecco ... per gestire una sessione ti servono quindi queste informazioni:
    - un'identificativo di sessione, che può essere un MD5, SHA1, un'id auto incrememntante, un testo casuale ... insomma ... qualcosa che sia unico nel 99.99% dei casi
    - il timestamp dell'ultima azione (lo unix timestamp è comodissimo da usare in queste situazioni)
    - i dati della sessione stessa, salvati, ovviamente, tramite la serializzazione ( www.php.net/serialize | www.php.net/unserialize )

    Ti consiglio VIVAMENTE di usare mysql, e lasciar perdere i file di testo che si auto distruggono in caso di scrittura simultanea

    basta che ti crei una bella tabella con questi campi:
    codice:
    - session_id              VARCHAR 32
    - session_creationtime    INT 10
    - session_lastactiontime  INT 10
    - session_page            VARCHAR 255
    - session_data            TEXT
    Il primo, session_id, contiene l'identificativo, il secondo ed il terzo contengono un timestamp unix (i secondi trascorsi dal 1970 fino ad adesso) e sono, rispettivamente, la data di creazione della sessione (per sapere da quanto tempo è entrato caio) e la data dell'ultima azione. L'ultimo campo, session_data, sono i dati della sessione serializzati

    quando crei una sessione ...
    codice:
    $session_id = md5(uniqid(microtime(), true));
    mysql_query("INSERT INTO sessions VALUES('{$session_id}', UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), '', '')");
    Ad ogni richiesta della pagina devi:
    - verificare che la sessione sia valida
    - eliminare le sessioni scadute
    - alla fine aggiornare la data dell'ultima azione, page e riserializzare i dati della sessione

    ... in pratica

    *** verificare che la sessione sia valida
    codice:
    $query = mysql_query("SELECT * FROM sessions WHERE UNIX_TIMESTAMP() - session_lastactiontime <= 300 AND session_id = '{$session_id}'");
    
    $session_row = mysql_fetch_assoc($query);
    
    if (is_array($session_row) == false)
    {
    // la sessione e scaduta ... ne ricrei una nuova o lo mandi ad una pagina standard
    }
    
    $session_row['session_data'] = unserialize($session_row['session_data']);

    *** eliminare le sessioni scadute
    codice:
    $query = mysql_query("DELETE FROM sessions WHERE UNIX_TIMESTAMP() - session_lastactiontime > 300");


    *** alla fine aggiornare la data dell'ultima azione, page e riserializzare i dati della sessione
    codice:
    $query = mysql_query("UPDATE sessions SET session_lastactiontime = UNIX_TIMESTAMP(), session_page = 'pagina_corrente', session_data = '" . mysql_escape_string(serialize($array_dati_sessione)) . "' WHERE session_id = '{$session_id}'");
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  3. #13
    io preferisco sempre un cookie se l'utente li ha abilitati, poi se non è cosi passo il sessionid da get... sempre da database il tutto gestito da una comoda classe ^^
    Chiamatemi sven se volete non ho voglia di fare una nuova email per una nuova registrazione xD
    Mac Future User , Ventilatore for PC Cooler user , - dry is coming -

  4. #14
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    quindi se ho ben capito (e lo dubito fortemente) daniele_dll suggerisce di lasciare stare session_start(), di fottersene dei cookie e di gestire "a mano" tutta la faccenda. sbaglio?

    ancora una domanda nell'ipotesi che i cookie sianio disattivati:

    siete sicuri al 100% che non si riesce a far girare via GET l'id di sessione che nei casi normali viene veicolato tramite il cookie che crea session_start() nel client?

  5. #15
    no, dico di scriverti un tuo gestore delle sessioni tramite una tua classe
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  6. #16
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    si ma far girare l'id di sessione senza fare affidamento sui cookie senza usare classi è possibile? tipo aggiungendo l'id di sessione a tutti i link?

  7. #17
    siete sicuri al 100% che non si riesce a far girare via GET l'id di sessione che nei casi normali viene veicolato tramite il cookie che crea session_start() nel client?
    Ma io ho detto il contrario, quando son disabilitati i cookie, php aggiunge autimaticaemnte una variabile bia GET ogni volta che si carica una pagina
    Chiamatemi sven se volete non ho voglia di fare una nuova email per una nuova registrazione xD
    Mac Future User , Ventilatore for PC Cooler user , - dry is coming -

  8. #18
    Originariamente inviato da nourdine
    si ma far girare l'id di sessione senza fare affidamento sui cookie senza usare classi è possibile? tipo aggiungendo l'id di sessione a tutti i link?
    Si che è possibile, per farti un esempio, potresti estirlo cosi: prima di tutto devi far affidamento al database, quindi ogni azione delle sessioni le dovresti controllare tramite db.
    Poi puoi trovare un modo per ricavarti l'id di sessione, io faccio cosi:
    codice:
    $this->session_id = md5 ( uniqid ( microtime ( ) ) ) ;
    poi per aggiungerlo ad ogni link puoi usare due metodo:
    1- Ad ogno link metti la variabile per far restituire il sessionID ( modo piu snervante, ma che consiglio )
    2- Fare un funzione dove un preg_match aggiunge alla fine di ogni href="..." la variabile del sessionid.
    Il secondo metodo naturalmente, richiederebbe molti piu controlli sulla stringa ed è meno affidabile ma piu veloce.

    Cmq in entrambi i modi non dovresti piu usare il session_start
    Chiamatemi sven se volete non ho voglia di fare una nuova email per una nuova registrazione xD
    Mac Future User , Ventilatore for PC Cooler user , - dry is coming -

  9. #19
    Originariamente inviato da nourdine
    si ma far girare l'id di sessione senza fare affidamento sui cookie senza usare classi è possibile? tipo aggiungendo l'id di sessione a tutti i link?
    tutto è possibile basta volerlo e saperlo fare

    dopo di che ... ovviamente si può fare senza classi ed ovviamente puoi appendere manualmente nei tuoi template, in ogni link e form, l'id di sessione ... per poi far prendere questa variabile a php

    ma:
    - rischi di non essere indicizzato (i motori di ricerca normali accettano fino ad un parametro in GET, google fino a 2 ... dovresti usare il mod_rewrite per aggirare l'ostacolo)
    - rischi che il valore sia cambiato pure da chi non ne capisca nulla con la conseguenza che poi si lamenta "ah non funziona nulla, il sito fa schifo, qua e la ^^"
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  10. #20
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    ok non è una soluzione valida. a titolo informativocomunque mi spieghi come faccio a riuscire nell'impresa? come lo metto nell query? faccio una roba tipo:

    www.miourl.com?id=<?php echo session_id(); ?>

    e poi come faccio a farlo prendere dalla nuova pagina in cui sono diretto? con che comando dico a php: "guarda che la sessione è gia stata aperta! non aprirne altre. ti prego ... pesca i dati sul file di sessione x"??

    grAAZIE

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.