Domanda

Sto cercando di controllare la proprietà scaduto di corrente FormsAuthenticationTicket dell'utente per vedere se il periodo di autenticazione è scaduto. Ma quando il periodo è scaduto, non sono mai in grado di ottenere informazioni sufficienti per creare anche il biglietto per il check. Ho provato questo:

FormsIdentity id = (FormsIdentity)User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;

Ma l'utente è nullo quando il periodo di autenticazione è scaduto. In modo che non funzionerà. Ho provato questo:

HttpCookie authCookie = context.Request.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);

Ma i moduli del biscotto è andato quando il periodo di autenticazione è scaduto, il che significa authCookie sarà nullo. In modo che non funziona.

C'è un modo per davvero get l'oggetto FormsAuthenticationTicket quando il periodo di autenticazione è scaduto? Ci deve essere, perché c'è una proprietà "Scaduto" nell'oggetto. Che cosa mi manca?

Grazie.

È stato utile?

Soluzione

Un cookie di scadenza è lasciato fuori delle intestazioni da parte del browser client. Quindi non c'è nessun code-behind modalità di recupero da quando il cliente non potrà mai dare a voi. Potrebbe essere possibile utilizzare i cookie javascript per recuperare i dati del cookie grezzi e metterlo in un colpo di testa posta o chiamata AJAX per qualche scopo, ma credo che il meccanismo javascript cookie ha le stesse restrizioni di scadenza come il browser. cookie scaduti non sono più validi, e quindi non accessibili.

Altri suggerimenti

Supponendo che il browser (IE soltanto) non rimuove un scaduto biscotto , ASP.Net sembra mettere a nudo l'autenticazione scaduto biglietto dalla collezione Request.Cookies. E c'è ancora nel Request.Header [ "Cookie"], ma non disponibili nella collezione cookie. Credo che questo accade a volte tra il "BeginRequest" e gli eventi "AuthenticateRequest". Io corro lo stesso problema e sto esplorando ulteriormente me stesso.

    void context_BeginRequest(object sender, EventArgs e)
    {
        string cookie = ((HttpApplication)sender).Context.Request.Cookies[".ASPXFORMSAUTHSS"].Value;
        FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie);
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top