Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    problema di array dentro un cookie

    Mi rivolgo qui, per disperazione!
    Ho una procedura che gestisce un complesso cookie, formato da un array, che in qualche caso contiene altri arrays. Niente di straordinario (pensavo io), ma invece sono giorni che ci perdo gli occhi...
    Il cookie contiene una serie di variabili che mi servono nelle varie pagine. Qualcosa del tipo:
    Codice PHP:
        $_SESSION_VALUES['_INCLUDE_DIR'] = $absolute "include" $slash;     // directory con le "include"
    $_SESSION_VALUES['_CSS_DIR'] = $absolute "css" $slash;     // directory con le "css"
    $_SESSION_VALUES['_JS_DIR'] = $absolute "js" $slash;     // directory con i "JavaScript"
    $_SESSION_VALUES['_WRITE_DIR'] = $this->vardir// directory su cui scrivere
    $_SESSION_VALUES['_USERNAME'] = "";     // spazio per il nome utente.
    $_SESSION_VALUES['_PASSWORD'] = "";        // spazio per la password (encoded).
    .... 
    Il tutto alla fine è serialized e, per buona misura base64_encode/ed!
    Codice PHP:
    setcookie($cookie_namebase64_encode(serialize($_SESSION_VALUES)), time()+3600'/'
    Quando e se mi serve qualche altro valore, non faccio che aggiungerlo all'originaro array, per esempio così:
    Codice PHP:
    if (! $_SESSION_VALUES['_PAGE_RECORD'] = get_record (PAGE_TABLE$_POST['page'])) die ('non ho letto niente'); 
    e quindi risalvo il cookie per la pagina successiva:
    Codice PHP:
    $nick->set_cookie (COOKIE_NAME$_SESSION_VALUES); 
    Inutile dire che get_record è una semplice funzione che seleziona la tabella e ritorna l'array del record di cui si definisce l'ID.
    Iniutile dire che set_cookie della classe $nick funziona per tutto il resto tranne (pare) che per quello che adesso finalmente dirò!
    Quando salvo l'array del record di PAGE_TABLE in $_SESSION_VALUES['_PAGE_RECORD'], lo vedo a posto non appena salvato. Vale a dire, nel momento in cui imposto la variabile, per poi salvare il cookie. Ecco il mio debug efefttuato subito dopo aver salvato il cookie: naturalmente questo è il contenuto dell'array di variabili $_SESSION_VALUES, non del cookie, che si vedrà solo alla pagina successiva.
    Codice PHP:
    _COOKIE_NAME -> _nuova_interattiva
    _PAGE_RECORD 
    -> Array
    _COLONNA 
    -> 0
    _GAME_RECORD 
    -> Array 
    Come si vede anche $_SESSION_VALUES['_GAME_RECORD'] (trattato nel medesimo modo) contiene un Array di record, letto dalla tabella GAME_TABLE.
    Ecco quindi come si presenta il cookie alla pagina successiva:
    Codice PHP:
    _COOKIE_NAME -> _nuova_interattiva
    _PAGE_RECORD 
    ->
    _COLONNA ->
    _GAME_RECORD -> Array 
    _GAME_RECORD c'è, ma _PAGE_RECORD (trattato con analoghe routines) non compare mai! En passant anche il campo _COLONNA è stato mangiato e anche questo non mi sembra normale.
    Capisco che sia una domanda assurda, ma qualcuno ha una qualche idea di cosa diavolo sia successo?
    Grazie in anticipo.
    Non ho sbagliato: ho invece scoperto mille modi per fare lampadine che non funzionano...
    (Thomas Alva Edison)

  2. #2
    Ciao
    Non so se centra, ma hai letto la documentazione di set cookie??

    http://php.net/manual/en/function.setcookie.php

    Come vedi i parametri accettati sono STRING, quindi se ci vuoi sbattere su un array ti conviene, o almeno credo, usare la funzione implode:
    http://it2.php.net/manual/en/function.implode.php

    per scrivere il cookie, e la funzione explode per leggerlo:
    http://it2.php.net/manual/en/function.explode.php

    vedi se è questo che ti serviva...

  3. #3
    Beh, hai senza dubbio ragione, ma in effetti non ho notato che sia proprio richiesto che sia una stringa. Sono tuttavia ben conscio che la struttura di un array verrebbe persa se non si utilizzasse un sistema di 'imbustamento': io ho scelto serialize e poi anche base64_encode che come dice il manuale PHP
    is designed to make binary data survive transport through transport layers
    Vedi http://php.net/manual/en/function.base64-encode.php
    Tuttavia qui c'è qualcosa che non sapevo, che non ho capito, o che mi confonde: si direbbe un problema di lunghezza.
    Nel caso in test, il campo del primo array risulta molto lungo dopo la serializzazione: un migliaio di bytes! Si direbbe che questo costituisca un problema, anche se non ho trovato dove ciò sia detto.
    Infatti ho cambiato: invece di mettere l'array del record, ho messo la chiave di lettura, che è semplicemente numerica. Questo mi obbliga a un lavoro in più, perché debbo rileggere il record ogni volta che rientro nella pagina, però funziona. E non è così pesante in definitiva.
    Grazie per la collaborazione, però.
    Non ho sbagliato: ho invece scoperto mille modi per fare lampadine che non funzionano...
    (Thomas Alva Edison)

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