Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1

    rimuovere tutte le variabili in sessione tranne alcune

    ciao,
    qualcuno sa se è possibile rimuovere con unset() ad esempio tutte le variabili in sessione tranne alcune ben precise?

    Durante la navgiazione il mio utente ne crea un numero notevole, decine, e sarebbe molto utile creare una funzione unica che chiamata di volta in volta faccia pulizia...

    mmm chissà se si può...

    grazie come sempre !


  2. #2
    un ciclo foreach con un if che bypassi gli indici che vuoi salvare.

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

  3. #3
    O anche una di quelle funzioni che fanno l'intersezione tra array!
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  4. #4
    Originariamente inviato da piero.mac
    un ciclo foreach con un if che bypassi gli indici che vuoi salvare.
    Si, è un'idea.. ma il foreach come lo imposto?

  5. #5
    variabili che vuoi salvare
    $salvare = array('indice1', 'indice2');
    foreach($_SESSION as $temp){
    if(!in_array($temp, $salvare)){
    unset($_SESSION[$temp]);
    }
    }

  6. #6
    Buona la proposta di BUBU...

    e' meglio usare questo sistema perche' $_SESSION ha delle proprieta' particolari... usando le funzioni di array intersect si rischia di trasferire queste proprieta' all'array di destinazione, oppure peggio di privare $_SESSION delle sue peculiarita' trasferendo a questo valenza di array "vulgaris"....

    una alternativa, ma sostanzialmente identica, a quanto proposto da bubu potrebbe essere:
    codice:
    foreach($_SESSION as $key)   {
      
      if($key == 'salva1' OR $key == 'salva2' )  {
        
        continue;     }
        
        else {  unset($_SESSION[$key]);     }

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

  7. #7
    Originariamente inviato da piero.mac
    Buona la proposta di BUBU...

    e' meglio usare questo sistema perche' $_SESSION ha delle proprieta' particolari... usando le funzioni di array intersect si rischia di trasferire queste proprieta' all'array di destinazione, oppure peggio di privare $_SESSION delle sue peculiarita' trasferendo a questo valenza di array "vulgaris"....

    una alternativa, ma sostanzialmente identica, a quanto proposto da bubu potrebbe essere:
    codice:
    foreach($_SESSION as $key)   {
      
      if($key == 'salva1' OR $key == 'salva2' )  {
        
        continue;     }
        
        else {  unset($_SESSION[$key]);     }
    Perdonami, ma quali sarebbero le particolarità di $_SESSION, a parte l'essere un superglobal?
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  8. #8
    Originariamente inviato da Shores
    Perdonami, ma quali sarebbero le particolarità di $_SESSION, a parte l'essere un superglobal?
    Fai una prova..... prova a passare un array intero a $_SESSION

    $_SESSION = $tuo_array;

    questo e' solo un esempio.... non voglio toglierti il piacere di scoprire cosa passi e recuperi poi in sessione.... e questo a partire da php 5.0.4 ....

    se fai una ricerca c'e' pure un thread su questo argomento. Parrebbe un bug di php ma non viene considerato tale.... La particolarita' e' che viene serializzato in un file... sembra cosa da poco.

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

  9. #9
    Si, hai ragione sul passare direttamente un array a $_SESSION, ma invece non ho capito per nulla il resto del tuo discorso: perchè non sarebbe considerato un bug? Hai provato a segnalarlo?

    Che altre stranezze dovrei vedere? Io non ne ho trovata nessuna usando normalmente gli elementi dell'array $_SESSION...

    Perchè il fatto che la sessione venga serializzata in un file è importante ai fini di questo discorso?

    Non capisco, mi spieghi che intendi?
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  10. #10
    Non e' cosi' oscura la cosa....

    quello che ho notato e' che manipolando l'array $_SESSION in quanto tale... cioe' come array e con le funzioni degli array (ma non tutte), si ha che $_SESSION "perda" (concedimi il termine) delle sue peculiari caratteristiche di array di sessione sempre registrato.

    Succede che gli indici manipolati "paiono" non essere piu' registrati, e di conseguenza non vengono trasferiti nella serializzazione depositata nel file di sessione. Che sia corretto od errato non lo saprei dire. Se dopo la manipolazione dichiari $_SESSION globale allora i suoi elementi tornano ad essere tutti registrati.

    Questo comportamento e' cambiato con il rilascio php 5.0.4 subito passato 5.0.5. Con la 5.0.3 non succedeva. L'ho trovato perche' in alcuni script passavo di botto tutto il $_POST in $_SESSION per il trasporto dei dati in paginazione o altre pagine e mi trovavo le sessioni "VUOTE". Ho dovuto modificare degli script funzionanti dalle release 4.3.x e trasferire i dati con un ciclo foreach.

    Ora potrebbe benissimo essere che nei nuovi rilasci questo problema non ci sia piu', non l'ho piu' provato, anche perche' mi va a pennello il ciclo foreach. Se tu gestisci i dati singolarmente per indice tutto OK, gestiti invece a livello complessivo di array sembrerebbe che questo indice cosi' trasferito in $_SESSION perda la registrazione in sessione o meglio, acquisisca oltre ai dati anche le caratteristiche dell'array stesso che viene trasferito (che non e' registrato).

    Questo succede (o succedeva) con php 5.0.5 - apache 2.0.52 su win xp. Ora in 5.1.4 non lo so.

    Segnalato al team php e' stato classificato come "bogus".....

    Se ritrovo il link te lo segnalo.

    Per me il vero bug e' che se dichiaro GLOBAL $_SESSION dopo questi trasferimenti gli indici vengono nuovamente registrati.

    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.