Wie füge ich ein cookie für jeden Besucher auf meinem asp.net MVC-Website?
Ich experimentiere mit ein ASP.NET MVC 3 Website, mit razor als view engine. Ich muss ordnen ein cookie, das für jeden Besucher meiner Website. Was wäre denn der beste Ort/Weg, dies zu tun?
Bitte erläutern, denn ich bin sehr neu auf ASP.NET.
sieht aus wie eine mögliche dup, stackoverflow.com/questions/3147323/cookie-management-in-mvc
Hallo Jon, Nein, ich weiß wie Sie ein cookie, die Kern-Frage ist, wie/wo zu tun, dass für jeden Besucher.
Hallo Jon, Nein, ich weiß wie Sie ein cookie, die Kern-Frage ist, wie/wo zu tun, dass für jeden Besucher.
InformationsquelleAutor Erik Oosterwaal | 2011-06-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es gibt 3 Möglichkeiten, es zu implementieren, ohne zu brechen mvc-Muster:
1 - Basis-controller-Klasse mit dem angegebenen Verhalten bei
OnActionExecuting
/OnActionExecuted
/OnResultExecuting
Methode (wenn dieses Verhalten notwendig über die gesamte web-site)2 - Create-action-filter mit dem angegebenen Verhalten bei
OnActionExecuting
/OnActionExecuted
/OnResultExecuting
Methoden:und
zuordnen-filter-Attribut, um einige Controller/Aktionen (wenn dieses Verhalten nicht notwendig für alle web site), z.B.
oder
3 - Create-action-filter mit dem angegebenen Verhalten bei
OnActionExecuting
/OnActionExecuted
/OnResultExecuting
Methoden und registrieren Sie es aufglobal.asax
- es wird Arbeit für alle Aktionen, die von allen Controllern (wenn dieses Verhalten notwendig für alle web site)Ich nicht empfehlen die Verwendung von Basis-Controller Weg, weil es weniger extensible als Globaler Filter Weg. Verwenden Sie unterschiedliche Globale Filter für die Bereitstellung von verschiedenen unabhängigen, globalen Verhalten.
Ja, mit den filter-Parametern gibt Ihnen feinkörniger Kontrolle. Sie können Parameter hinzufügen, Attribut, Konstruktor (zum Beispiel MyCookiesAddingAttribute(string name) ), gelten für controller [MyCookiesAdding("A")] und überschreiben für einige action [MyCookiesAdding("B")]. Es ist sehr leistungsfähigen Mechanismus.
Vielen Dank für das Beispiel Evgeny, ich war nicht bewusst diese Filter.
Rico, es sieht aus wie Sie haben auch die option, um den filter global, indem es das Globale.asax - weblogs.asp.net/gunnarpeipman/archive/2010/08/15/...
InformationsquelleAutor Evgeny Levin
Diese arbeiten würde, unabhängig davon, welche Seite der Benutzer zuerst kommt.
Sie Erben könnten Ihre Controller mit einem Basis-controller und dann fügen Sie einige Informationen zu den OnActionExecuting Methode
Chris, kannst du das etwas erläutern? Denn dies wäre eine ideale Lösung für mich, denn ich habe bereits einen basecontroller Klasse in meinen code im moment.. ich bin neugierig, was die Vorteile von einer Aktion filter wäre.
Suave, es wäre besser als ein action-filter, weil es macht Ihre Verwendung mehr lose gekoppelt. Es ist viel einfacher, zu wählen, zu schmücken oder nicht schmücken Controller und Aktionen, als es ist und rückgängig-Basis-Controller. Im MVC-Basis-Controller neigen zu werden (oder dazu führen) code smell.
Und ein Beispiel dafür, warum Base-Controller kann dazu führen, Geruch code, diesen code oben. Angenommen, Sie haben einen controller, wo für 1 spezifische Aktion, die Sie absolut NICHT haben KANN, dass cookie erstellt. An diesem Punkt haben Sie keinen Anspruch, andere als zu "hacken" der Basis-controller, Unterstützung für Ihren edge-Fall, oder entfernen Sie die Aktion aus der original-controller und erstellen Sie einen neuen controller zu bedienen, die einzige Aktion, die nicht davon abhängig, dass die Basis-controller.
InformationsquelleAutor Lareau
Haben Sie schon-Sitzung und der session-cookie.
Aber wenn Sie benötigen, zu schreiben und einen bestimmten Wert in ein cookie haben Sie Zugriff auf die response-stream aus dem controller
this.Response.Cookies.Add();
im inneren der Steuerung (dies ist nicht erforderlich)Suave nur daran denken, Bedenken über session hijacking von cookie zu stehlen. Und stellen Sie sicher, dass Sie verwenden, cookies, die HttpOnly und zu bewerten, ob Sie möchten, um zu gehen, nur SSL zu.
InformationsquelleAutor Chris Marisic
Setzen eines Cookies getan werden sollte, in Ihren controller. Sie können ein cookie gesetzt, in etwa so:
Wenn Sie brauchen, um den Wert aus Ihrer Sicht der beste Weg wäre, um es zu Holen in Ihren controller und stecken es in ein view-Modell oder viewstate:
Und in Ihrem Blick:
Natürlich, danke.
InformationsquelleAutor alexn