5

Ich versuche, zwischen benutzerdefinierten Daten in meiner MVC-Anwendung entweder als Identitätsnachweis oder als Sitzungsdaten zu wählen, um die Anzahl und Häufigkeit von Datenbank-Round-Trips auf Anfragen zu reduzieren. In Anbetracht von Leistung, Sicherheit und anderen Best-Practice-Überlegungen weiß ich jedoch nicht, welchen Weg ich gehen soll.Wählen Sie zwischen ASP-Identitätsansprüchen und Sitzungsdaten

Ich werde alle Vorschläge zu diesem Thema schätzen.

+0

Session Blöcke gleichzeitige Ajax-Anfragen während Identität doesn' t. –

Antwort

2

IMO (und seine nur meine Meinung) auf das, was ich weiß, über Ansprüche, Cookies und Lagerregeln:

Performance weise ich habe noch nie einen Unterschied zwischen den Ansprüchen und Session Speicher gesehen (es sei denn, das Cookie von groß wird eine Menge von Ansprüchen) sie scheinen beide in etwa die gleichen Leistungseinbußen so weit wie die Geschwindigkeit geht (sie beide müssen nachschlagen die Daten von einem Ort (CLaims = Cookie, Sitzung = Server-Laufwerksspeicher) als für beste Praxis, die mitkommen würde die Zeilen, in denen VIEL Daten gespeichert werden müssen

Von dem, was ich in meiner Erfahrung gesehen habe (korrigiere mich, wenn ich falsch liege), aber Sitzungsdaten sind auf der Festplatte auf dem Server gespeichert und hat im Grunde nur Auf Ihrer Server-Festplatte haben Sie freien Speicherplatz für Größenbeschränkungen usw., während Cookies eine fest codierte Datengröße haben. Je mehr Ansprüche Sie speichern, desto größer wird der Cookie. Wenn Sie also sagen, dass der Cookie überschritten wird, kann der Client einen Leistungseinbruch sehen in der Tat sendet es die gesamten Cookie-Daten in jede Anfrage an die Website, wo wie bei Session der Server sucht die Daten lokal und es gibt weniger Daten vom Browser gesendet.

so meiner Meinung nach der besten Praxis ist, wenn Ihre persistente Daten Ihrer Datenbank-Lookup speichern eine kleine Stellfläche ist es dann wirklich ist keine bewährte Methode, um es nur, was auch immer verwenden Sie es vorziehen, aber wenn Ihre Speicherung eines viel von Bits vor allem Saiten dann Sitzung wäre die beste Praxis meiner Meinung nach, da es Daten Rundreise zwischen Client/Server speichert und hat nicht die Größenbeschränkung, die Sie irgendwann treffen und dann ziehen Sie Ihre Haare aus wundern, warum Ihre Daten isn 't there (done that in der Vergangenheit selbst, denn wenn der Cookie zu groß ist, weigert sich der Client einfach stillschweigend und dauerte 3 Tage um herauszufinden, es war die Größe des Cookies)

4

Wie Sie Benutzerdaten für Ihre App speichern, hängt stark von der Anwendung selbst ab. Als Richtlinie ist jedoch die Verwendung der anspruchsbasierten Authentifizierung und das Speichern der Ansprüche in einem Sitzungscookie ein sehr gebräuchlicher Ansatz. Werfen Sie einen Blick auf asp.net Identität - http://www.asp.net/identity/overview/getting-started/introduction-to-aspnet-identity

Sie sollten in der Lage sein, die Daten im Sitzungscookie gespeichert zu optimieren. Beispiel: - Wenn Ihre Anwendung immer den Namen des Benutzers auf jeder Seite anzeigen muss, können Sie den Namen im Sitzungscookie angeben. Wenn Sie jedoch nur auf einer Seite des Benutzerprofils andere Benutzerinformationen wie Adresse, Firma usw. anzeigen müssen, können Sie diese Details in einer Datenbank mithilfe der im Sitzungscookie gespeicherten Namenskennung abfragen. Wenn Sie sich die ASPNET-Identität ansehen, werden Sie sehen, dass Sie nicht direkt mit Sitzungscookies arbeiten müssen, da Cookie-Authentifizierungs-Middleware sicherstellt, dass die Ansprüche über die Benutzereigenschaft (oder ClaimsPrinciple.Current) des MVC-Controllers verfügbar sind. Sie sollten entscheiden, welche Ansprüche für alle Anfragen über die Benutzereigenschaft und welche Benutzereigenschaften durch eine userInformation-Datenbank abgefragt werden sollen. Natürlich sollten Sie den Schlüssel (Name-ID oder E-Mail-Adresse) in den Benutzerinformationen Datenbank in den Ansprüchen speichern, so dass Sie jederzeit Datenbank abfragen können.

+0

Vielen Dank für Ihre Antwort. Ich habe den Link jedoch durchgelesen, aber er beantwortet meine Frage nicht. Ich weiß bereits über Ansprüche. Ich verwende Ansprüche in meinen Projekten, aber ich weiß auch, dass diese benutzerspezifischen Eigenschaften, die als Ansprüche gespeichert werden, ebenso in der Sitzung gespeichert werden können und in beiden Fällen Rundreisen in die Datenbank sparen.Aber, meine Frage ist zu klären, welcher Ansatz in Bezug auf Best Practices und Performance besser ist. ** Der von Ihnen gepostete Link beantwortet diese Frage nicht **. – Josh

+0

Ich werde versuchen, etwas mehr zu erklären. Sehen Sie die aktualisierte Antwort – rawel

+0

Ich verstehe das Konzept, das Sie erklären, perfekt, aber ich würde gerne Ihre großartigen Erklärungsfähigkeiten loben. Aber das ist nicht der Bereich, in dem ich verwirrt bin. Was ich klarstellen muss, ist also: Was ist der Unterschied bei der Speicherung dieses Benutzernamens als 'new Claim (ClaimTypes.UserName," username ");' und Speichern unter 'Best Practices' und 'Session [Benutzername] =" Benutzername "' Anwendungsleistung? – Josh

Verwandte Themen