40 messaggi dal 23 ottobre 2013
io uso l'oggetto HttpContext.Session di .net core, solo che c'è un problema.

La sessione permane tra diverse schede del browser, e permane anche se apro una nuova istanza del browser.

vorrei che fosse indipendente per permettere di avere più istanze dell'applicazione anche nel caso il sito venga riaperto in una nuova scheda oppure in una nuova istanza del browser
40 messaggi dal 23 ottobre 2013
esiste un modo per fare si che HttpContext.Session di .net core, per la stessa applicazione, non venga condiviso tra le istanze e le schede dello stesso browser?

mi collego al sito e memorizzo un valore in HttpContext.Session.
ma se apro un un altra scheda, e anche aprendo proprio un'altra finestra, dello stesso browser e collegandomi l'applicazione, il valore inserito permane. Io vorrei che invece i valori della sessione tra le due istanze dell'applicazione fossero indipendenti.


Mi viene in mente una soluzione alternativa che consiste, lato server, di non salvare in sessione ma su DB.

Esistono altre soluzioni, magari impostando qualche configurazione di HttpContext.Session?
427 messaggi dal 13 novembre 2009
La Session di cui parli tu è lato server ed è specifica dell’utente che accede al sito indipendentemente dalla login, basta la homepage. Essendo lato server non ha nulla s che fare con il client e quindi con il browser se non identificando eventualmente il sessionid lato client ma è un lavoro che non ti consiglio.
Insisto con il dire che se il tuo obiettivo è diversificare e rendere le session ovvero i tanti del browser indipendenti unici sistema è token e sessionstorage. Questo è quello che viene in mente a me
40 messaggi dal 23 ottobre 2013
Mi potresti spiegare a grandi linee cosa intenti con token e sessionStorage?

E' un meccanismo lato server di .net core?

A me viene da pensare al sessionStorage lato client, dove memorizzo in token nel browser e comunico col server con chiamate ajax. Ma come memorizzo però sul server la sessione? httpcontext.Session da questo problema e non posso usarlo, e quindi mi viene in mente di persistere sul DB.
11.886 messaggi dal 09 febbraio 2002
Contributi
kappak non hai risposto alla mia domanda.
La ripropongo in altri termini: qual è il requisito che ti spinge ad avere sessioni diverse su due tab diverse?

Uno dei tuoi utenti ha manifestato questo bisogno? E perché ne ha bisogno?

Enjoy learning and just keep making
40 messaggi dal 23 ottobre 2013
Sto implementando un applicazione per giochi online tipo scacchi e carte e volevo che fosse cosi.

Comunque ho capito come fare con sessionStorage e token jwt.

Grazie.
427 messaggi dal 13 novembre 2009
Il fatto che tu debba implementare un sito di giochi o altro se mi permetti non giustifica la necessità del session lato client. Detto questo se permetti il suggerimento, attenzione a scrivere bene la parte client utilizzando framework ad hoc e moduli plugins aggiuntivi collaudato. Ovviamente la sicurezza è e deve restare in primis lato server
11.886 messaggi dal 09 febbraio 2002
Contributi

Il fatto che tu debba implementare un sito di giochi o altro se mi permetti non giustifica la necessità del session lato client.

Esatto, ha ragione Flavio.

Se vuoi consentire ad un utente di giocare più partite contemporaneamente (o di giocare contro sé stesso) non c'è l'effettiva necessità di creare più sessioni. Anzi, secondo me non dovresti proprio usare l'oggetto Session.

Se un utente volesse giocare contro sé stesso, il flusso potrebbe essere questo:
  • L'utente Mario clicca il bottone per creare una nuova partita;
  • In risposta a questa azione, la tua applicazione crea un nuovo oggetto Partita che ha un proprio ID univoco. Inoltre, l'applicazione aggiunge l'utente Mario alla collezione Giocatori dell'oggetto Partita. Questa relazione tra Mario e quella specifica Partita ha essa stessa un proprio ID che viene restituito al client;
  • Mario apre una nuova tab nel browser e vede che nell'elenco delle partite aperte c'è quella che lui stesso ha creato. La seleziona e clicca il bottone "Unisciti alla partita";
  • In risposta a questa azione, la tua applicazione unisce Mario (di nuovo, come secondo giocatore) alla collezione Giocatori dell'oggetto Partita. Questa nuova relazione tra Mario e la Partita ottiene un nuovo ID che viene restituito al client;
  • Quando Mario fa una mossa nella prima tab, invierà sia l'ID della partita che l'ID che gli era stato assegnato come primo giocatore;
  • Quando Mario fa una mossa nella seconda tab, invierà l'ID della partita (che è lo stesso usato nella prima tab) che l'ID che gli era stato assegnato come secondo giocatore (che è diverso da quello della prima tab).


Come vedi non c'è alcun bisogno di usare sessioni. Semplicemente si tratta di ID che aiutano l'applicazione a identificare chi sta facendo una certa mossa e in relazione a quale partita.
Ti consiglio giusto di non usare degli ID numerici autoincrementanti perché sarebbero predicibili. Per questioni di sicurezza è meglio che gli ID siano del tipo Guid.
https://docs.microsoft.com/it-it/dotnet/api/system.guid.newguid?view=netframework-4.8

Il giocatore deve conoscere solo l'ID della partita e l'ID che gli è stato assegnato come giocatore, e non gli ID degli altri giocatori altrimenti potrebbe compiere delle mosse per loro conto.

ciao,
Moreno
Modificato da BrightSoul il 24 agosto 2019 11:53 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.