Pagina 1 di 20 1 2 3 11 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 198

Discussione: [PILLOLA] sessioni

  1. #1
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093

    [PILLOLA] sessioni

    Salve a tutti
    Mentre lavoravo ad un mio progetto (in php ovviamente) ho dovuto documentarmi un bel po' sulle sessioni (ringrazio tutti su questo forum per avermi aiutato ) e mi sono accorto alla fine che sono uno strumento davvero potente! Ho deciso quindi di scrivere questa "pillola" sul loro funzionamento e il loro utilizzo. Spero vi sia d'aiuto

    1. Cosa sono le sessioni
    Un Grande problema degli sviluppatori su internet è sempre stato quello di tener traccia di un utente. Il problema principale in effetti è che l'utente nel momento in cui richiede una pagina ad un server web, apre una connessione, riceve la pagina e le eventuali immagini o file inclusi in essa, dopodiché la connessione viene chiusa! Questo meccanismo si ripete ad ogni richiesta di pagina che voi fate anche in questo momento, su questo stesso forum!
    Di soluzioni con un po’ di ingegno ce ne sono, all’inizio la soluzione più ovvia era quella di riconoscere l’utente tramite l’indirizzo IP, ma non è una soluzione sicura… infatti alcuni provider internet forniscono l’accesso alla rete tramite un server proxy, un server proxy è un intermediario fra il client e il server, fisicamente la richiesta di una pagina viene fatta dal proxy e non dal client, una volta completata il proxy poi farà girare il tutto e lo manderà al client. Questo è un problema, in questo modo il server può concludere che più richieste di pagine fatte da uno stesso indirizzo IP appartengono allo stesso utente, ma non è così.
    Un’altra soluzione più sicura era quella di immettere delle variabili nascoste nelle pagine, solitamente infatti la navigazione in un sito avviene seguendo un URL o un(a) form. Si aggiungeva un ID univoco a entrambi i metodi in questo modo:

    <a href=”pagina1.php?sID=adffkkADFFX223454DDAdadffd”> clicka e godi</a>(saibal ®)

    oppure aggiungendo questo tag in un(a) form:

    <input type=”hydden” name=”sID” value=” adffkkADFFX223454DDAdadffd”>

    In ogni pagina si controlla l’esistenza della variabile $sID, se impostata si riconosceva l’utente.
    C’è anche una funzione utile per generare un ID univoco ed è
    uniqid(string $prefisso)
    essa genera un ID univoco, se viene passato un prefisso, l’id univoco sarà preceduto da questo prefisso.
    Cosa c’è di sbagliato?? Niente, funziona perfettamente, ma voi siete sicuri che in ogni pagina, ogni url, ogni form sia dotato di questa variabile speciale?? Siete sicuri che non ve ne sia sfuggito qualcuno??
    Una soluzione elegante è invece l’utilizzo dei cookie, memorizzare il sid di sessione in un cookie, lavora in modo silenzioso e lo sviluppatore conosce in ogni momento il contenuto di quel cookie (se esiste). Purtroppo però c’è ancora gente che si ostina a non aggiornare i browser, infatti i cookie non sono sempre esistiti. C’è anche gente che ha la testa piena di quelle boiate sulla privacy che i giornali dicono dei cookie, ma questo è un altro discorso. L’unica funzione necessaria per servirsi dei cookie è
    Setcookie()
    L’argomento ‘cookie’ è stato già trattato molte volte, se vi servono maggiori informazioni fate una ricerca.
    Nell’ultima versione di php4 però si è voluto ovviare (anche un po’ in ritardo rispetto agli altri) a questo problema introducendo le sessioni.
    Tutto un arsenale di funzioni legate alle sessioni è stato introdotto, elencarle tutte non sarebbe molto pratico, inoltre, se avete bisogno di questo, c’è sempre il manuale ondine: www.php.net. Il loro funzionamento è semplice, controllano se il client ha abilitato i cookie, se si utilizza i cookie nel modo sopra descritto, altrimenti utilizza il metodo della variabile nascosta, la variabile quindi sarà aggiunta in ogni pagina quindi. E’ possibile memorizzare delle variabili di sessione che si vanno a posizionare in una posizione ben precisa sul server.

    2. Come creare una sessione
    Per creare una sessione basta semplicemente chiamare la funzione
    Session_start()
    Non prende argomenti, spiegare il funzionamento di questa funzione (molto complessa) sarebbe troppo lungo, l’unica nota è che se la sessione è stata aperta precedentemente, una nuova chiamata a questa funzione farà riaprire la vecchia sessione.
    3. Le variabili di sessione
    E’ possibile memorizzare da una parte sul server alcune variabili personali dell’utente di cui si vuol tenere traccia, l’uso di troppi cookie è poco elegante senza contare i sopraccitati problemi legati ai cookie. Questo procedimento avviene utilizzando la funzione session_register() facendone il seguente utilizzo:
    $var = 1;
    session_register(‘var’);

    In questo modo la variabile $var verrà memorizzata fra le variabili di sessione. Attenzione: il parametro da passare alla funzione deve essere obbligatoriamente una stringa, bisogna inserire il nome della variabile a cui fa riferimento senza il simbolo $ davanti.
    Il tipo della variabile passata alla funzione session_register() può essere anche un array o un oggetto. Non ha importanza.
    E’ possibile accedere alle variabili di sessione tramite la variabile speciale $_SESSION[] o direttamente tramite il nome della variabile, nel caso precedente con $var.
    Esiste anche un modo per verificare se una variabile di sessione è stata impostata, si utilizza la funzione:
    session_is_registered(‘var’)
    Restituisce vero se è settata, falso se non lo è.
    E’ possibile cancellare una singola variabile di sessione utilizzando la funzione
    Session_unregister(‘var’)
    O tutte in una volta utilizzando la funzione:
    session_unset()
    3. Chiusura di una sessione
    La sessione, per impostazione predefinita, termina alla chiusura del browser, per alcuni può essere un inconveniente, tuttavia è possibile cambiare a piacimento la scadenza del cookie con la funzione:
    session_set_cookie_params($durata, $percorso, $dominio, $sicurezza)
    il funzionamento dei parametri è identico a quelli che si utilizzano per i cookie, tranne il fatto che qui viene espressa la durata del cookie e non la scadenza!! Fate attenzione!! In un cookie quando si impostava la scadenza era solito mettere time() + 86400 se il cookie doveva durare un giorno, qui va SOLO 86400.
    4. Distruzione di una sessione
    La sessione tuttavia rimane memorizzata nella memoria del server se la sessione è ancora aperta (se come sopra settate un cookie destinato a durare svariati giorni). E’ possibile cancellare l’intera sessione con tutte le variabili correlate. Quindi:
    session_destroy()
    non prende parametri. La sessione ovviamente deve essere aperta per poter essere cancellata.
    5. Funzioni aggiuntive
    Esistono delle funzioni aggiuntive che possono tornare utili:
    session_id($new_ID)
    restituisce il sid di sessione, se viene passato l’univo parametro, il sid viene sostituito con quello passato.
    Session_name($nome)
    Restituisce il nome della sessione, per defalut ‘PHPSESSID’, se viene passato un parametro tuttavia è possibile rinominarlo. Esso sarà il nome della variabile speciale o del cookie.
    Session_encode()
    Questa funzione è un po’ particolare ma molto utile, serializza l’intera sessione in una stringa in modo da poter essere salvata su un database o file di testo ed essere recuperata successivamente con la funzione
    Session_decode($stringa)

    Credo basti, per ogni eventuale domanda chiedete qui sono a vostra disposizione.

    Byez

  2. #2
    ottimo kuarl... ci voleva proprio una pillola sulle sessioni.


    brava!

    p.s.
    non mi sono sbagliato... per me tutti i maschietti sono femminucce
    w la topa

  3. #3
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    ottimo kuarl... ci voleva proprio una pillola sulle sessioni.
    :mavieni: :mavieni:

    non mi sono sbagliato... per me tutti i maschietti sono femminucce

    mah.... sei proprio strano tu vale anche x i tuoi amati moderatori??

    byez

  4. #4
    Originariamente inviato da kuarl

    mah.... sei proprio strano tu vale anche x i tuoi amati moderatori??
    Soprattutto...
    Addio Aldo, amico mio... [03/12/70 - 16/08/03]

  5. #5
    Pillola aggiunta al thread in rilievo
    Addio Aldo, amico mio... [03/12/70 - 16/08/03]

  6. #6
    Utente di HTML.it L'avatar di chris
    Registrato dal
    Sep 1999
    Messaggi
    1,568
    si parla di una pillola e io dovrei starmene zitto?

    c'è un metodo alternativo per utilizzare le sessioni: non utilizzare session_register();

    se usate una versione del php 4.0.x potete creare le sessioni in questo modo:

    <?php
    session_start();

    $HTTP_SESSION_VARS['nome_variabile'] = "valore della variabile";

    echo $HTTP_SESSION_VARS['nome_variabile'];
    ?>

    mentre per una versione 4.1.x o 4.2.x
    <?php
    session_start();

    $_SESSION['nome_variabile'] = "valore della variabile";

    echo $_SESSION['nome_variabile'];
    ?>

    come si può vedere dagli esempi dunque si utilizza session_start() ma non session_register()

    per maggiori informazioni www.php.net/session_register
    "Nei prossimi tre anni col mio governo vogliamo vincere anche il cancro, che colpisce ogni anno 250.000 italiani e riguarda quasi due milioni di nostri concittadini"

  7. #7
    e dato che ci siamo, posto anche un codice per rendere la variabili $_SESSION compatibile con tutte le versione del php:
    if(!isset($_SESSION)) $_SESSION=$HTTP_SESSION_VARS;

  8. #8
    Utente di HTML.it L'avatar di jubin
    Registrato dal
    Jan 2002
    Messaggi
    234

    Si`!!!

    Sono mesi che sento parlare di sessioni e non ci capisco niente... appena torno a casuccia dalle vacanzucce mi sbatto su sta pillola. Grazie!

  9. #9
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    faccio un aggiornamento alla mia pillola.... girovagando fra i settaggi del vbulletin infatti avevo visto dei parametri speciali e mi sono documentato ancora

    nella pillola ho scritto
    La sessione tuttavia rimane memorizzata nella memoria del server se la sessione è ancora aperta (se come sopra settate un cookie destinato a durare svariati giorni)....
    ca22ate.... fagianate.... boiate.... non è niente vero.

    La sessione resta memorizzata nella memoria temporanea del server x impostazione predefinita SOLO 180 s. Esiste la funzione
    session_cache_expire($durata);
    che senza parametri restituisce la scadenza della sessione, con parametri imposta una nuova scadenza della sessione, se deve durare un giorno intero quindi va inserito 86400 NON time() + 86400, come per i cookie quindi.
    E' possibile limitare anche quante sessioni possono essere salvate contemporaneamente nella cache del server, infatti non è molto corretto avere 1000 sessioni aperte con scadenza 10 mesi in una cartella che in teoria doveva essere temporanea..... esiste quindi la funzione
    session_cache_limiter($numero_sessioni_aperte);
    che senza parametri restituisce il numero attualmente impostato, con invece imposta il numero massimo di sessioni aperte sul server.

    Se il vostro traffico è esagerato e contate di tenere aperte un milione di sessioni sul vostro server vi ricordo che è sempre possibile serializzare e salvare magari su un database una intera sessione utilizzando le funzioni session_encode() e session_decode() nel modo sopra citato.

    Questa volta credo di aver esaurito completamente l'argomento, in ogni caso se serve io sono qui

    byez

  10. #10
    Ciao a tutti!
    Sto preparando qualcosa anch'io sulle sessioni e tornando dalle vacanze scopro che il malefico Kuarl mi ha preceduto
    Comunque prima di settembre non se ne fa nulla quindi inserisco qui alcune precisazioni.

    - session_cache_limiter()
    corrisponde all'omonima impostazione del php.ini e non serve a "limitare anche quante sessioni possono essere salvate contemporaneamente nella cache del server"

    è un'impostazione che riguarda il client, ovvero il browser. Definisce la modalità di gestione delle pagine web che "contengono" sessioni da parte della cache del nostro browser.
    Accetta come parametro una stringa e non numeri, normalmente è impostata a "nocache" (nessuna memoria nella cache). Non è chiaro quando sia utile impostare "private" o "public".

    - session_cache_expire()
    come funzione php è disponibile solo dalla versione 4.2 e corrisponde anch'essa ad un'impostazione del php.ini:
    determina il tempo di vita nella cache del browser delle pagine che "contengono" sessioni. Default 180 MINUTI, sarebbero tantini per la validità della sessione sul server.
    Questa impostazione è insignificante se session.cache_limiter=nocache

    La validità della sessione sul server viene definita da
    session.gc_maxlifetime (nel php.ini), di default 24 minuti.
    gc sta per "garbage collection", ovvero dopo 24 minuti senza accesso al file di sessione quest'ultimo è "monnezza" e può essere eliminato.
    Ovviamente se settiamo la vita del cookie di sessione (quello che ci rende riconoscibili al server) a
    session.cookie_lifetime = 0 (default)
    Il file di sessione sul server "scade" nonappena chiudiamo la finestra del browser.
    Ovvero all'apertura di una nuova finestra il server non potrà più riconoscerci e ci assegnerà un'altro id di sessione.

    L'impostazione che limita il proliferare di files di sessione sul server è

    - session.gc_probability (default = 1)

    Determina la probabilità, in percentuale, che si verifichi una pulizia dei file di sessione scaduti ogni volta che un utente accede ad una delle pagine del sito che "contengono" sessioni.
    Perchè non impostare questa probabilità a 100%?
    Perchè significa un sacco di lavoro per il server: verificare l'ultimo accesso a TUTTI i file di sessione ed eliminare quelli scaduti, e questo ad OGNI visita.
    La probabilità a 1, limita soltanto un pochino la proliferazione dei file, eventualmente possiamo eliminarli "manualmente" a fine giornata.

    Comunque possiamo anche fare in modo che php salvi le sessioni su db o su un unico file dbm, ma questo è un discorso lungo.
    Volendo possiamo anche creare un sistema di sessioni tutto nostro (in stile phplib), perchè come abbiamo visto non si tratta di nulla di esoterico....anzi, a volte potrebbe essere addirittura conveniente quando non dobbiamo gestire grandi quantità di dati.
    Ci sarebbero ancora un sacco di cose da dire ma spero di riuscirci a fine mese
    per favore NIENTE PVT TECNICI da sconosciuti

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 © 2024 vBulletin Solutions, Inc. All rights reserved.