Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    12

    conflitto sessione e invio xml

    Ciao, questo è il mio primo post e spero di non partire subito con domande banali.

    Sto realizzando un'applicazione che lato client invia allo script php una richiesta di download di un file xml, mediante il metodo post.
    Lo script riceve la richiesta, carica il file xml e lo invia in risposta al client.

    Problema:
    se php apre una sessione (session_start come prima operazione di output), l'xml in qualche modo che non ho ancora identificato, non viene correttamente ricevuto o interpretato dal client (actionscritp 3)
    se non apro la sessione tutto funziona alla perfezione.

    Mi viene il sospetto che il cookie di sessione sporchi in qualche modo l'invio.
    Sapete darmi qualche dritta?
    é un problema reale?
    come posso risolverlo?
    posso impedire l'invio del cookie di sessione? considerate che le sessioni le gestisco in altro modo poichè devo poter usare più istanze del client contemporaneamente sulla stessa macchina.


    Grazie!!!!
    P.

  2. #2
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Senza un po' di codice è difficile aiutarti, ad ogni modo io richiamerei da browser il file che restituisce l'xml e verificherei visivamente cosa arriva al client.

    Ciao

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    12
    un estratto del codice del main script
    <?php
    //legge l'XML inviato dal client
    $receivedData = new SimpleXMLElement(file_get_contents("php://input"));

    //riapre la sessione
    session_id($receivedData->sessionId);
    session_start();

    //gestisce il caricamento dei settings di login
    if($receivedData->request == "downloadSettings")
    {
    $settingsManager = new SettingsManager(SYSTEM_USER, SYSTEM_PASSWORD, SYSTEM_DB);
    echo $settingsManager->getSettings('login', 'guest', $receivedData->target, $receivedData->language);
    exit;
    }
    ?>

    SettingManager è un oggetto che tramite i metodi fopen e fread legge e restituisce il file xml

    Il file xnl che leggo è corretto perchè:
    - prima lo caricavo direttamente con actionscript e funzionava
    - ora continua a funzionare se solo non apro la sessione in php

    Ma si può disattivare l'invio del coockie realtivo alla sessione? tanto non mi serve

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    12
    provato anche con varie combinazione delle seguenti 3....

    set_ini("session.use_cookies", "0");
    set_ini("session.use_only_cookies", "1");
    set_ini("session.use_trans_sid", "0");

    il problema persiste

    dimenticavo....php è in verione 5

  5. #5
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Il cookie ti serve se vuoi la sessione (anche se potresti settare l'invio del session id nell'url).

    Comunque (e scusa lo sfogo) da un programmatore non accetto la definizione "non funziona", questo è il tipo di feedback che mi aspetto da un cliente che non capisce una mazza di programmazione.

    Se provi ad aprire quell'xml con il browser ti segnala qualche errore? vedi qualche carattere strano?

    ciao

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    12
    hai ragione sul troubleshooting :-)
    è che essendo il client realizzato con flash (AS3), il feedback non è immediato.
    Sono certo che l'xml contenuto nel file è corretto perchè usato e riusato in varie versioni precedenti e perchè apribile con browser.
    Certo dovrei verificare in che modo arriva al client.
    E qui si complica un po', ma ora metto mano al codice AS3.

    Per il discorso cookies...non li uso per le sessioni.
    I numeri di sessione li genero io all'avvio del client e poi li passo come paramtri all'interno di strutture xml di colloquio tra client e server.

    l'altra certezza è che ciò che manda in palla il tutto è la presenza o meno della sola istruzione session_start

    ad ogni modo faccio un po' di controlli, magari con uno script che simuli il client, così magari si chiarisce il tutto.
    Posto tra un po' i risultati

    Grassie!!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    12
    forse ho risolto, anche se nella spiegazione trovo qualche pecca di forma.

    1) inibire l'invio di coockies e session id via URL non è necessario, ma visto che non li uso ai fini della sessione li inibisco comunque:
    ini_set("session.use_cookies", "0");
    ini_set("session.use_only_cookies", "1");
    ini_set("session.use_trans_sid", "0");
    Dovrebbe rallentare un po' lo script ma dovrei risparmiare sul volume di traffico in rete.
    Ne vale la pena?
    Credo che delle tre bastino le prime due oppure la prima e l'ultima. la seconda e la terza sono ridondanti, corretto?


    2) una chiocciolina davanti session_start.
    non ho idea di cosa venga visualizzato altrimenti, nella simulazione senza client AS3 che ho prodotto non si vede nulla di anomalo. Fatto sta che senza @ non funziona più.
    Che sia il caso di indagare?


    3) la cosa meno ovvia è che quando in session_id() uso un valore prelevato dall'xml in input, devo chiuderlo tra apici, come se non lo considerasse una stringa:
    session_id('$receivedData->sessionId') ;
    la cosa non è necessaria se uso una variabile locale che contiente un sessionId generato localmente (per intenderci...all'apertura del client, quando inizializzo la sessione).
    Qualche commento per capire meglio l'ultimo passaggio?

    Grazie per il supporto.
    Sempre un conforto sapere di non essere soli.

    Ciao
    P.

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    12
    Ho continuato ad aprofondire i problemi riscontrati e forse comincio a venirne a capo davvero.
    Dopo le soluzioni citate nel precedente post ho continuato a riscontrare anomalie.
    Dimenticate quanto precedentemente detto, la causa è legata alla classe simplexmlelement.
    Quando si accede ad un valore di un elemento xml è necessario fare un cast esplicito per convertirlo in stringa, altrimenti, pur comportandosi come tale in alcuni contesti, resta pur sempre un oggetto più complesso con proprietà e metodi propri e in alcune situazioni si comporta in modo anomalo.
    Tipicamente questo accade nei confronti (==) e nei passagi come parametro a funzioni che si apsettano stringhe.
    Quindi....(string)!!!!

    Purtroppo ho ancora qualche problema se l'elemento xml contiene un numero. Il cast (integer) non dà un comportamento stabile, a volte va, a volte non va.
    Suggerimenti?

    Continuo ad indagare.

    P.

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.