Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126

    Session server side recuperata con javascript ma vuota nel passaggio ad altra pagina

    Ciao a tutti quanto tempo che non scrivevo su questo forum Bhè è arrivato il momento.
    Ho un problema: non chiedetemi il perchè ma ho bisogno di recuperare il valore di una var di sessione tramite javascript, o meglio tramite XMLHttp.
    Cercherò di essere breve, il problema mi si presenta quando passo da una pagina all'altra, praticamente sulla stessa pagina riesco a settare e a recuperare la variabile di sessione, ma quando passo su un'altra pagina (tramite link) la variabile sembra essere vuota o non settata.. non sò Ovviamente ho già controllato se distrattamente la resetto, ma non mi sembra proprio, e la cosa + strana e che cmq lato server la vedo riempita con i valori passati dalla pagina precedente
    Vabbè vi faccio vedere un pò di codice.. non vi spaventate, è soltanto un pò verboso
    codice:
    var reqXML;   
    function LoadXMLDoc(url){
    //alert(url);
      if (window.XMLHttpRequest){ //Mozilla, Firefox, Opera 8.01, Safari
        reqXML = new XMLHttpRequest(); 
    
    //---> attenzione qui   
        reqXML.onreadystatechange = BuildXMLResults; 
    
        reqXML.open("GET", url, true); 
        reqXML.send(null); 
      }
      else if(window.ActiveXObject){ //IE
        reqXML = new ActiveXObject("Microsoft.XMLHTTP"); 
        if (reqXML) { 
          reqXML.onreadystatechange = BuildXMLResults; 
          reqXML.open("GET", url, true); 
          reqXML.send(); 
        } 
      }
      else
      { 
        alert("Il browser utilizzato non supporta alcune funzionalità del sito.");
      }
    } 
    
    
    function BuildXMLResults()
    {
      if(reqXML.readyState == 4)
      { 
        if(reqXML.status == 200)
        { 
          alert(reqXML.responseText);
           
            if(reqXML.responseText != "")
            {
              //se viene trovato il segno di pipe nella seconda occorrenza
              //setto lo stato del menu
              if(reqXML.responseText.indexOf("|") == 1)
              {
                setCurrentStateMenu(reqXML.responseText);
              }
              else
              { 
                alert("La sessione sembra essere scaduta. Possibile perdita delle informazioni di stato.");
              }
            }
        } 
        else
        {
    
         alert("Si sono verificati problemi nel recuperare i dati di sessione:\n" + reqXML.statusText);
              
        }		
      }
      
    }
    
    function LoadSession()
    {
        var sessionParameter = 'c|i|c|c|i|o'; LoadXMLDoc('http://localhost/sito/setSession.aspx?state='+sessionParameter); 
      }
    
    function LoadBody()
    {
    LoadXMLDoc('http://localhost/anticontraffazione/setSession.aspx');
    }
    
    
    function setCurrentStateMenu(state)
    {
    //faccio i fatti miei con la sessione recuperata :)
    }
    Ora, nell'onload (javascript) del body faccio un bel LoadBody() che a sua volta richiama LoadXMLDoc(). Da notare che LoadBody() non passa parametri alla pagina server-side. Questa funzione punta ad una pagina server-side che vi riporto per completezza (devo farlo scusate), è codice c#, molto semplice:
    codice:
     protected void Page_Load(object sender, EventArgs e)
        {
            Response.ContentType = "text/xml";
            //se la var di sessione non esiste la creo
            if (Session["mainMenuState"] == null)
            {
                Session.Add("mainMenuState", "");
            }
            //se esiste la modifico con i dati passati
            else
            {
    //se è stato passato il parametro 'state' modifico la sessione altrimenti non la modifico 
                if (Request.QueryString["state"].ToString() != null)
                {
      
                    Session["mainMenuState"] = Request.QueryString["state"].ToString();
                }
             }
    
            //ritorno la sessione
            Response.Write(Session["mainMenuState"]);
        }
    Quindi quando l'utente apre per la prima volta la pagina la funzione LoadBody() fà una chiamata asincrona e ritornerò una var di sessione vuota. Poi questo utente fà una operazione su questa pagina e fà un'altra chiamata asincrona dove questa volta passerà un parametro, quindi nel codice server-side mi accorgo che la sessione esiste già, che il parametro passato non è null e ritorno la variabile di sessione questa volta con un valore.
    L'utente clicca su un link per passare ad un'altra pagina e quindi di nuovo all'onload del body viene fatta la chiamata asincrona senza parametri, il codice server-side si accorge che la variabile di sessione esiste già e "dovrebbe" ritornarmi la variabile precedentemente popolata.. ma questa cosa non succede.. nel senso che via javascript non vedo il valore, ma server side varaibile e valore ci sono.. help
    Voglio l'alt+s anche per FF

  2. #2
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    fermi tutti, provando con firefox il debugger mi andava in eccezione su :
    codice:
    Request.QueryString["state"].ToString()
    in quanto null perchè non passavo niente.. nel senso che manco la variabile passavo quindi era giustamente null.. quindi ho tolto il metodo ToString() e magia delle magie su ff funziona
    su ie ancora no! ma che cacchio!! però su ie non và manco in eccezione.. questo dovrebbe stare a significare che non il debugger non ci arriva proprio su quella istruzione.. uhm.
    Ma per caso ci sono differenze tra l'onload di ie con quello di ff ?
    Voglio l'alt+s anche per FF

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.