WebApp e Sessioni

Ciao a tutti,

sto cercando di gestire un login in una WebApp.

Ho creato un form con un login, al click del pulsante del login effettuo questa azione:

    if isLogin = true then
      
      Session.Cookies.Set("login", username)
      utente = utente.caricaUtente(username)
      Session.userLogged = utente
      wpLogin.close
      wpHome.show
end if

Se poi all’interno della pagina wpHome guardo i lvalore della Session.userLogged Nil

Ma se sono sullo stesso browser e l’ho inserito precedentemente non dovrebbe essere valorizzato?
Come utilizzo i dati in sessione??

PS: l’oggetto utente non NIL ho verificato

Grazie Mille

Sono riuscito ad arrivare ad una Quadra. Riesco a leggere la sessione.

Ma se cambio TAB NIL come se aprissi una nuova sessione, penso che per questo dovrei agire a livello di cookie.

Far in questo modo.

Se cambi TAB cambi sessione: e’ come se aprissi una nuova finestra.
Quello che l’occhio percepisce e il cervello sottointende non corrisponde a come il sistema funziona.
La coincidenza di un unico browser con due tab distinte non corrisponde alla visione dall’applicazione.
Non a caso le applicazioni web Xojo sono a tutti gli effetti delle applicazioni “single page” con corrispondenza univoca alla sessione.

@Maurizio Rossi
Se in J2EE con qualsiasi Framweork (Struts, Spring ecc…) cambio Tab la sessione mi rimane attiva.
Ho lavorato anche con Liferay, quando cambio Tab l’utente è loggato, la sessione è attiva. Quindi non perdo gli oggetti caricati in nella Session che posso riutilizzare a livello di codice. Questo mi facilità senza dover effettuare il login ogni volta.

Sto provando ad ottenere lo stesso risultato utilizzando inserendo i dati nei Cookie.
Volevo utilizzare la Sessione sull’evento HandleUrl a livello di WebApplication, ma mi sa che non si può fare Aihme… mi serviva inserire nella sessione dei parametri in questo stato… ma la sessione deduco venga caricata in seguito.

WebAPplication.HandleUrl viene gestita all’esterno delle sessioni e, come riportato nella documentazione, solo per URL non gestiti dall’applicazione.
I cookies dovrebbero essere accessibili a meno di particolari gestioni del browser utilizzato.
Le sessioni sono indipendenti ma i cookies dovrebbero essere accessibili da tutte le sessioni aperte dalla stessa istanza di browser secondo la documentazione WebSession.Cookies.Set

Io non riesco a farlo funzionare.

Sto utilizzando come guida:

https://documentation.xojo.com/api/web/websession.html#websession-cookies.Set

E secondo la Guida:

Cookies are browser specific. If a user has multiple instances of your app open at the same time using the same browser, they will all share the same cookie information.

Ma se apro un’altra istanza sullo stesso browser mi vedo sempre la Session senza parametri caricati… come se fosse nuova.

Questo quello che ho fatto in scrittura:

Session.Cookies.Set("lingua", "IT")

In lettura ho fatto questo:

if (Session <> Nil and Session.Cookies <> Nil) then sigla = Session.Cookies.Value("lingua") end if

Dentro la condizione non entra perch NIL

PS: Ho provato con IE e con Chrome

Firefox si comporta come riportato dalla documentazione sia in un altro tab che in un’altra finestra.
In quale punto dell’applicazioni accedi a “Session”?: il valore pari a nil indica che stai riferendo alla sessione in un punto in cui la sessione non e’ definita.

Il settaggio:

Session.Cookies.Set("lingua", "IT")

Lo eseguo nel metodo Open della Session

Mentre la lettura viene effettuata da un metodo presente nella HandleUrl , perch mi deve generare un HTML.

Mi aspetterei che dopo aver settato il Cookie sia sempre presente… invece mi sa che che qualsiasi cosa parta da HandleUrl non vede nessuna sessione

Mi spiace, handleUrl viene eseguito all’esterno delle sessioni.
Se il codice lo esegui all’interno di una sessione o di una pagina, implicitamente vive nella sessione, il tutto funziona.

P.S.
Attenzione all’impiego dell’identificatore “session”: vedi le note di WebSession .

Volevo generare pagine HTML… mi sa che allora devo abbandonare questa strada!!!
Pensavo che HandleUrl riusciva a leggere cosa era stato impostato nel Browser. Mi inventer altro :wink:

Grazie mille per il supporto.

Non ho capito comunque l’obbiettivo che vuoi raggiungere e come questo sia legato ad una sessione.
Magari il tutto e’ fattibile senza problemi: potresti chiarire meglio cosa vuoi realizzare?

La WebApplication ha comunque visibilita’ di tutte le sessioni.

In pratica sto realizzando un mio CMS personale per gestire il mio sitoweb, sono giù ad un buon punto.

La parte BackEnd sono le classiche WebForm di Xojo mentre la parte FrontEnd sono delle pagine HTML.

Per entrare in BackEnd chiamo una URL che mi porta sulla form… da li non ho problemi con la Sessione.
Ora la sessione mi serviva per mantenere dei parametri impostati, in modo che le pagine HTML avevano dei dati a disposizione (lingua impostata, utente loggato ecc)

La generazione delle pagine HTML partiva dal HandleUrl, perché ovviamente l’utente chiama le pagine tramite Url del browser… cliccando anche su un link porta a quella classe. Ovviamente non c’è la sessione.

Ora sto rimendiando passando alcuni parametri che mi interessano in querystring, non è ottimale… ma per ora funziona.

La sessione ha un WebSession.Identifier che puoi utilizzare a livello di applicazione mediante WebApplication.SessionWithIdentifier per accedere alla sessione.
Se riesci a generare l’url delle pagine aggiungendo WebSession.Identifier come parametro puoi in HandleURL identificare la sessione ed accedere alle proprieta’ della sessione stessa.
Magari il tutto e’ piu’ semplice?

Uh… faccio subito una prova
ti inserir nelle note dei creatori :smiley: