2011-12-29 22 views
5

Ho una pagina in cui un utente accede a un'applicazione di back-end tramite un servizio web. Il servizio Web restituisce un ID di sessione che desidero memorizzare in un cookie per 40 minuti, poiché dopo 40 minuti l'applicazione di back-end chiude automaticamente la sessione.C# Cookie - La proprietà Scade non imposta

mio codice per scrivere il cookie:

private void SetCookie() 
{ 
    Response.Cookies.Add(new HttpCookie("Cookie_SessionID")); 
    Response.Cookies["Cookie_SessionID"].Value = ni.NicheSessionID; 
    Response.Cookies["Cookie_SessionID"].Expires = DateTime.Now.AddMinutes(40); 

    //.... after a few more things 
    Response.Redirect(returnUrl); 
} 

quindi nella pagina di ricezione ho questo:

private HttpCookie GetCookie() 
{ 
    HttpCookie cookie = Request.Cookies["Cookie_SessionID"]; 
    if (cookie != null && cookie.Value != null) 
    {    
     return cookie; 
    } 
    return null;   
} 

Per qualche ragione il cookie restituito da GetCookie() ha sempre un valore Expires di 0001-01-01 00:00:00, anche se quando visualizzo i cookie nel browser ha la scadenza corretta.

Letta this in cui si afferma cookie scaduti non sono semplicemente inviati al server, suppongo quello che potrebbe accadere è che il cookie è essere scritto correttamente, ma il browser non è invio la data di scadenza, perché in realtà è inutile ? ...

Il mio problema è che voglio catturare con precisione che - il cookie è 'scaduto' e quindi devono ricollegarsi di nuovo - ma ho bisogno di visualizzare un messaggio sulla falsariga di "So che hai già loggato ma dovrai rifarlo "scrivi cosa.

Grazie

risposta

10

Il browser non invierà nulla al server ad eccezione del nome e del valore del cookie. Tutte le altre proprietà (scadenza, dominio, percorso, httponly, ...) non possono essere recuperate su richieste dopo che il cookie è stato impostato.

Se si desidera visualizzare un messaggio di questo tipo, è necessario un altro meccanismo per rilevare che l'utente ha effettuato l'accesso. È possibile impostare un cookie di presenza per un anno circa e verificare se esiste.

Il modo più accettabile per risolvere questo problema è reindirizzare l'utente a una pagina di accesso quando tenta di accedere a una risorsa protetta e visualizza alcuni messaggi sulla falsariga di "È necessario accedere per visualizzare questa pagina. sono stati precedentemente registrati, la tua sessione potrebbe essere scaduta. "

(Si noti inoltre che è necessario impostare nuovamente il cookie su ogni richiesta, in modo che l'utente non venga disconnesso se continua a utilizzare il sito. Non è chiaro dal codice se lo si sta facendo o no .)

3

Il protocollo HTTP non invia le date di scadenza dei cookie al server.

Problemi correlati