• Super User

    Problemi con variabile di sessione e XML

    Ciao a tutti,
    Ho un problema con una variabile di sessione che contiene XML, mi serve per creare dei feed RSS.

    In pratica, in una prima pagina (pagina di Joomla) ho una variabile di sessione e scrivo dentro del XML.

    
    
    session_start();
    
    $_SESSION['feedcode']="<?xml version='1.0' encoding='ISO-8859-1'?>
    <rss version='2.0' xmlns:dc='http://purl.org/dc/elements/1.1/' xmlns:content='http://purl.org/rss/1.0/modules/content/'>
     <channel>";
     
    $_SESSION['feedcode']=$_SESSION['feedcode']."<title>".$title."</title><link>http://www.miosito.ext/news/</link><description>Notizie al Web a cura di MioSito.ext</description><language>it</language>";
    
    ....*QUI SCRIVO ALTRA ROBA IN $_SESSION['feedcode']...RIMOSSO PER ABBREVIARE*
    
    $_SESSION['feedcode']=$_SESSION['feedcode']."</channel></rss>";
    ?>
    
    <a href="./modules/mod_eventlist_rss/events_rss.php">Live Feeds</a>
    

    Se clicco sul link "Live Feeds" in fondo, vado alla pagina "events_rss.php" il cui codice è, testualmente:

    <?php
    
    session_start();
    
    echo $_SESSION['feedcode'];
    
    ?>
    

    Dovrebbe scrivere nella pagina il codice XML generato e contenuto in $_SESSION['feedcode']...Ma la pagina è completamente bianca, compreso il codice (facendo "mostra sorgente pagina" in FF).

    Se invece faccio "echo $_SESSION['feedcode'];" nella pagina precedente (quella di Joomla) la variabile viene mandata in output correttamente...

    Dove sbaglio?:?


  • User Attivo

    Controlla i log del server, forse hai un parse error nel codice.

    In alternativa sostituisci lo script con questo codice:

    [php]<?php
    session_start();
    print_r($_SESSION);
    ?>[/php]


  • Super User

    Provato...
    Mi scrive solo "Array ( )" nella pagina...


  • User Attivo

    Questo significa che lo script funziona, la sessione è avviata ma non contiene nulla (un array vuoto).

    Ecco il motivo per cui *echo $_SESSION['feedcode'];*non restituisce niente (anche se abilitando la visualizzazione dei notice avrebbe mostrato un undefined index).


  • Super User

    mmm...
    Non sembrerebbe un problema legato a XML...

    Ora, nella pagina1 (quella di Joomla) anzichè costruire XML ho messo:
    **
    $_SESSION['feedcode']="pippo"**

    Nella pagina1, se faccio echo** $_SESSION['feedcode'];** mi scrive correttamente "pippo"

    La stessa istruzione nella pagina2 (la mia) non scrive nulla...
    Manca forse qualcosa a livello di Header?


  • Super User

    Come faccio quindi a recuperare il valore di questa sessione? Dove se lo perde???:?


  • User Attivo

    Secondo me hai un problema di propagazione della sessione.

    Prova ad inserire questo codice in entrambe le pagine e confrontane i risultati:

    [php]<?php echo(session_name() . ' => ' . session_id()); ?>[/php]


  • Super User

    Credo anche io, anche se non so perfettamente cosa ciò significhi in php...

    Risultato:

    pagina1:
    2b9632643123cb4354dfc096d4ffd0f7 => 9991f63a2e18839cd16157244d7eb3df

    pagina2:
    PHPSESSID => eb0f910ae3098944e452a1bf2ac88f7c

    Non legge la stessa roba direi :mmm:
    :arrabbiato:


  • User Attivo

    Prova a modificare la pagina2 in questo modo:

    [php]<?php
    session_name('2b9632643123cb4354dfc096d4ffd0f7');
    session_start();
    echo($_SESSION['feedcode']);
    ?>[/php]


  • Super User

    Niente...
    Pagina bianca....


  • User Attivo

    Innanzitutto..
    prova con
    var_dump($_SESSION);
    e vedi cosa ti esce...
    poi potresti provare così:

    Crea il file sessione.php con questo codice dentro:
    <?php
    ini_set('session.use_cookies', 1);
    ini_set('session.use_only_cookies',1);
    session_start();
    ?>

    poi modifica il codice così:

    require "sessione.php";

    $_SESSION['feedcode']="<?xml version='1.0' encoding='ISO-8859-1'?>
    <rss version='2.0' xmlns:dc='http://purl.org/dc/elements/1.1/' xmlns:content='http://purl.org/rss/1.0/modules/content/'>
    <channel>";

    $_SESSION['feedcode']=$_SESSION['feedcode']."<title>".$title."</title><link>http://www.miosito.ext/news/</link><description>Notizie al Web a cura di MioSito.ext</description><language>it</language>";

    ....QUI SCRIVO ALTRA ROBA IN $_SESSION['feedcode']...RIMOSSO PER ABBREVIARE

    $_SESSION['feedcode']=$_SESSION['feedcode']."</channel></rss>";
    ?>

    <a href="./modules/mod_eventlist_rss/events_rss.php">Live Feeds</a>

    E poi...

    <?php

    require "sessione.php",

    echo (isset($_SESSION['feedcode'])) ? $_SESSION['feedcode'] : "Impossibile trovare la sessione";

    ?>


  • Super User

    Dopo il tuo suggerimento:

    
    **Warning**:  session_start() [[function.session-start](http://www3.pipeline.it/modules/mod_eventlist_rss/function.session-start)]: Cannot send session cookie - headers already sent by (output started at /home/web/public_html/modules/mod_eventlist_rss/events_rss.php:5) in **/home/web/public_html/modules/mod_eventlist_rss/session.php** on line **4**
    
    **Warning**:  session_start() [[function.session-start](http://www3.pipeline.it/modules/mod_eventlist_rss/function.session-start)]: Cannot send session cache limiter - headers already sent (output started at /home/web/public_html/modules/mod_eventlist_rss/events_rss.php:5) in **/home/web/public_html/modules/mod_eventlist_rss/session.php** on line **4**
    Impossibile trovare la sessione  
    

  • Super User

    togliendo dall'ultima pagina "require(sessione.php)"

    ho solo:

    "Impossibile trovare la sessione"

    :arrabbiato:


  • User Attivo

    Uhm...ripeto la domanda di prima...cosa ottieni con
    var_dump($_SESSION);
    ?
    Poi, per il warning..ti suggerisco di modificare il file sessione cosi:
    <?php
    session_start();
    $feedcode ="";
    session_register("feed_code");
    ?>

    E modifica il file cosi:

    <?php

    require "sessione.php",

    echo (session_is_registered('feedcode')) ? $_SESSION['feedcode'] : "Impossibile trovare la sessione";

    ?>


  • Super User

    Dunque...
    Mi ero dimenticato questo test...
    Ho messo definitivamente come test "pippo" nella sessione per evitare problemi dovuti a XML
    Il "var_dump($_SESSION);" nella pagina1 dà un amarea di roba tra cui ["feedcode"]=> string(5) "pippo" } (quindi la sessione fin lì c'è)

    Nella pagina 2 invece dà "NULL"....(quindi si è perso la sessione?)


  • Super User

    Ohi Ohi...
    Dunque:
    il tuo ultimo esempio ha avuto come risultato:

    "Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line **0"

    register_globals **è su OFF in effetti...C'entra questa opzione?


  • User Attivo

    No, non disattivare register_globals, porterebbe ad un alto calo di sicurezza..
    direi che si è proprio persa la sessione...


  • Super User

    OK,
    Comunque ieri stavo pensando di risolvere così (dovrebbe funzionare e mi pare anche più pulito...)

    Nella pagina1 chiamo una funzione su pagina2 a cui passo come parametro il contenuto XML. La pagina2 deve a quel punto solo prendere ciò che le arriva e fare echo...

    O no???;)


  • User Attivo

    A quel punto ti basta ob_start()/include()/ob_get_clean()