Newsgroup: it.comp.www.asp
Titolo: [ASP .NET] cookie e sessioni

Uso l'autencazione Windows per riconoscere l'utente in una intranet.
Nel file global.asax ho:
Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As
EventArgs)
    ' Fires upon attempting to authenticate the use
    Dim requestUrl As String = Request.Url().AbsolutePath
    If (Not requestUrl.EndsWith("login.aspx")) Then
        ' se la pagina richiesta non è login.aspx
        If (Request.Cookies("Alice_Str") Is Nothing) Then
            ' se il cookie non esiste l'utente si deve autenticare
            Response.Redirect("login.aspx?returnUrl=" & requestUrl, True)
        End If
    End If
End Sub
Nel file login.apx dopo che l'utente ha scelto su che unità operare e ha
premuto il pulsante btnGO eseguo il seguente codice:
Private Sub btnGO_Click(ByVal sender As System.Object, ByVal e As
System.Web.UI.ImageClickEventArgs) Handles btnGO.Click
    'scrive cookie di autenticazione senza scadenza, verrà distrutto
automaticamente alla chiusura del browser
    Response.Cookies.Add(New HttpCookie("Alice_Str"))
    ' imposto le variabili di sessione
    setSessionVars()
    'rispedisco alla pagina richiesta o a pagina di default
    Dim returnUrl As String = Request.QueryString("returnUrl")
    If returnUrl Is Nothing Then
            Response.Redirect("Modalita.aspx")
    Else
            Response.Redirect(returnUrl)
    End If
End Sub
Il problema è:
 se la sessione scade e l'utente non ha chiuso il browser, il cookie di
autenticazione esiste ancora, l'utente non viene riautenticato, le variabili
di sessioni sono state distrutte e non sono ricreate,  per cui quando
l'utente riprende ad usare l'applicazione web il codice va in errore e
comunque anche se lo correggo controllando prima se le variabili di sessione
sono diverse da 'nothing' dovrei quanto meno avvisare l'utente che la sua
sessione e' scaduta e che ha perso tutte le modifiche non salvate
(l'applicazione salva i dati del datagrid in un dataset sul disco ed
aggiorna il database solo se l'utente preme il pulsante "salva tutte le
modifiche").
Come faccio ad avvisare l'utente che la sessione in cui lavorava è scaduta?
posso solo controllare se le variabili session esistono ancora? in tal caso
mi toccherebbe farlo all'inizio di ogni pagina poichè le variabili session
non sono accedibili dalla Sub Application_AuthenticateRequest del
Global.asax;
oppure
come faccio a settare il cookie in modo che si distrugga alla chiusura del
browser o al termine della sessione (se la sessione termina senza che ci sia
chiusura del browser)? devo distruggerlo manualmente nella Sub Session_End
del global.asax?
Ne approfitto per chiedere di risolvermi un dubbio:
dopo che ho creato il cookie con Response.Cookies.Add(New
HttpCookie("Alice_Str"))
in C:\Documents and Settings\nomeUtente\Cookies il cookie non c'è il file
del cookie, perchè?
cosa succede se aggiungo due volte un cookie sempre con lo stesso nome (con
l'istruzione sopra riportata)?  viene sovrascritto il primo?
cosa succede se provo ad eliminare un cookie che non esiste più? usando
l'istruzione Response.Cookies.Remove("Alice_Str")
Grazie,
--
Robynet


Moderatore di it.comp.www.asp - Microsoft .NET MVP
http://www.aspitalia.com/
 Enjoy the .NET community!
http://www.dev2dev.it/
 La rete ha connesso nuove particelle!
http://www.extensible.it/
 XML and beyond 

 corrente.
Lo faccio, ma funzionerebbe se il cookie venisse distrutto al termine
della sessione.
--
Robynet

 della sessione.
puoi avere un controllo su questo, impostando la scadenza su un timeout e 
lavorando di vari controlli.
ma ti complichi la vita, imho.
