Ich muss einen Benutzer abmelden, wenn der Benutzer die Registerkarte oder den Browser geschlossen hat. Wie mache ich das in ASP.NET MVC?
Es gibt einige Dinge, die Sie tun können, um sicherzustellen, dass der Benutzer beim Schließen des Browsers abgemeldet wird, aber es hängt davon ab, wie Sie den FormsAuthentication-Cookie setzen:
Damit wird der Cookie-Wert an die Abfragezeichenfolge in jeder Anfrage angehängt. Das Problem mit diesem Ansatz ist, dass es nicht sehr sicher ist und es mit SEO übergeht. Wenn ein Benutzer jemandem die URL sendet, die er verwendet, kann sich diese Person als der ursprüngliche Benutzer anmelden (wahrscheinlich nicht das, was Sie wollen). Was SEO-Probleme anbelangt, bewirkt dies, dass die gleiche Seite für einen Googlebot anders aussieht, je nachdem, welche URL übergeben wird. Jede QueryString-Änderung macht sie zu einer neuen URL und wenn jemand dies zum Posten eines Links verwendet; Es wird die Suchergebnisse für eine gegebene tatsächliche URL verwässern.
Wenn Sie einen Authentifizierungscookie für den Benutzer festlegen, setzen Sie Persistent auf %code% .
Wenn Sie dies in %code% tun, ist dies der Standardwert. Wenn Sie die Klasse %code% verwenden, müssen Sie den Cookie-Ablauf angeben.
%Vor%Wenn Sie %code% nicht festlegen, wird der Authentifizierungscookie standardmäßig am Ende der Sitzung ablaufen (wenn der Benutzer den Browser schließt).
%Vor%Es gibt keine narrensicheren Methoden; Alles, was Sie tun können, ist setzen Sie das Cookie-Ablaufdatum auf und hoffen, dass der Browser des Nutzers mitarbeitet. Wenn Sie wirklich, wirklich, wirklich wollen, dass der Cookie weg ist, können Sie immer einen JavaScript-Ansatz ausprobieren, aber das wird nicht funktionieren, wenn der Benutzer JavaScript deaktiviert hat.
%Vor%Es ist auch wichtig, welchen Browser Sie verwenden. Chrome kann im Hintergrund ausgeführt werden, und hält die Session-Cookies solange, bis die Zeitüberschreitung erreicht ist. - Sie werden nicht gelöscht, wenn der Browser geschlossen wird (Ich habe es auf die harte Tour herausgefunden).