Domanda

Sto creando un httpcookie, impostando solo il nome e il valore e non la proprietà scade, aggiungendola alla risposta. Abbastanza semplice. Il cookie è creato (ma non persisti) come previsto. Il problema è quando la sessione cambia per qualche motivo (come il sito Web è stato ricostruito o ho ricostruito la mia app quando il debug) quindi il cookie rimane in giro. Voglio che il cookie sia valido solo per la sessione originale è stato creato.

Secondo MSDN, dice: "Se non si specifica un limite di scadenza per il cookie, il cookie non è persiste al computer client e scade quando la sessione utente scade."

Immagino di non sapere esattamente quale "sessione scade" racchiude. Immagino che il cookie venga cancellato dopo 20 minuti quando la sessione scade. Ma il cookie dovrebbe essere cancellato se la sessione è stata creata su non esiste più per un numero qualsiasi di motivi? L'unica volta in cui ho visto il cookie viene cancellato è quando l'utente chiude tutte le finestre del browser e ti apre uno nuovo.

Se questo è tutto vero, potrei memorizzare l'ID sessione originale ("ASP.NET_SessionID") nel cookie, quindi controllarlo contro l'ID della sessione corrente, se sono diversi, quindi eliminare il cookie o creare uno nuovo.

Ecco il codice (l'unica differenza tra il mio cookie e quello negli esempi MSDN è memorizzando più valori nel cookie):

private void SaveValuesToCookie(string[] names, string[] values)
{
    HttpCookie cookie = new HttpCookie("MyCookie");

    for (int i = 0; i < names.Length; i++)
    {
        string name = names[i];
        cookie.Values[name] = values[i];
    }
    Response.Cookies.Add(cookie);
}

private string GetValueFromCookie(string name)
{
    HttpCookie cookie = Request.Cookies["MyCookie"];
    if (cookie == null)
        return null;

    return cookie.Values[name];
}
.

È stato utile?

Soluzione

.

L'unica volta che ho visto il cookie ottenere cancellato è quando l'utente chiude tutti Browser Windows e apre uno nuovo.

E questo è esattamente ciò che msdn significa quando dice che il cookie verrà eliminato quando la sessione scade. Sfortunatamente, credo che questo non sia come costante attraverso i browser comunque, quindi non è molto utile a nessuno.

Dovresti sempre impostare una data di scadenza sui cookie.

.

Se questo è tutto vero, potrei doverlo Conservare l'ID della sessione originale ("Asp.net_sessionid") nel cookie, quindi controllalo contro la corrente ID di sessione, se sono diversi, allora Elimina il cookie o creane uno nuovo.

Odio dirlo ma non ti aiuterà neanche. A.NET Framework piace riciclare gli ID della sessione, quindi non puoi garantire che sarà diverso.

Cattive notizie fuori mano, ti consiglierei di riconsiderare cosa stai cercando di fare da un punto di vista architettonico.

Riavvio L'app è qualcosa che accade interamente sul server; I cookie sono qualcosa che accadono interamente sul cliente. Mentre il cliente parlerà con il server, è puramente una relazione di richiesta / risposta, il server non può comunicare eventi come un riavvio dell'applicazione al browser.

Se si desidera memorizzare un valore da qualche parte che è valido solo per la durata della vita di una sessione server, perché non memorizzarlo in sessione piuttosto che in un cookie?

Altri suggerimenti

Sono consapevole di tutto ciò, ma non è abbastanza sicuro per i nostri bisogni dei nostri clienti.La sessione può ancora essere spinta o iniettata.Vedi: http://msdn.microsoft.com/en-us/Magazine / CC163730.aspx # S9

Sembra che io sia lasciato a creare un cookie sicuro scaduto separato della sessione e aggiornare la data di scadenza quando posso (cioè quando l'utente accede a determinate pagine).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top