6 Stimmen

Geländer: Wie kann man mit mehreren Controllern auf Sitzungsvariablen zugreifen?

Ich habe ein Problem mit der Verwendung von Sitzungsvariablen. Ich habe zwei Controller mit den Namen "graduate_students_controller" und "current_students_controller". Jeder dieser Controller steuert unterschiedliche View-Dateien. Ich verwende Sitzungsvariablen mit diesen beiden Controllern, um Sitzungsinformationen zu speichern.

Hier ist das Problem. Angenommen, ich habe zwei Ansichtsdateien "reports/current_students_list" und "reports/graduate_students_list", die jeweils separat von den oben genannten Controllern gesteuert werden.

Wenn ich nun versuche, diese beiden Webseiten im selben Browser zu öffnen und gleichzeitig mit ihnen zu arbeiten, erhalte ich von der zuerst geladenen Seite die Fehlermeldung "Nil object access". Das 'nil object' bezieht sich auf eine Sitzungsvariable, auf die die erste Seite zugreifen soll. Wenn ich jedoch eine dieser beiden Webanwendungen einzeln verwende, funktionieren sie einwandfrei.

Es scheint mir also, dass die Sitzungsvariablen der zuerst geladenen Webanwendung von der zweitgeladenen Webanwendung überschrieben werden, vielleicht weil die zweite Seite ein neues Cookie über dem ersten speichert?

Wie kann ich das beheben?

Für jeden Vorschlag sind wir sehr dankbar.

Um das noch etwas zu verdeutlichen: Die beiden Controller gehören zu der gleichen Rails-Anwendung. Und ich verwende keine identischen Sitzungsvariablennamen in beiden Controllern. Ich kann also nicht sehen, warum sie überschrieben werden können

Ich bin neu bei Rails und würde mich sehr über Hilfe bei diesem Problem freuen. Danke!

5voto

Codebeef Punkte 42570

Ich bin mir nicht sicher, ob Sie zwei Anwendungen ausführen oder ob Sie sich auf zwei Controller unter derselben Anwendung beziehen. Wenn Sie verschiedene Webanwendungen betrachten, dann denke ich, dass Sie denselben Namen und Sitzungsschlüssel in Ihrer Umgebung für jede dieser Anwendungen verwenden. Versuchen Sie, den Schlüsselwert in Ihrer environment.rb zu ändern:

config.action_controller.session = { :key => "_myapp_session", :secret => "..." }

Wenn Sie dieselbe Sitzungsvariable von zwei verschiedenen Controllern in derselben Anwendung verwenden, müssen Sie Ihren Code so schreiben, dass er dies berücksichtigt, obwohl ich dies nicht empfehlen würde. Wenn Sie auf Ihre Sitzungsdaten zugreifen, prüfen Sie auf Nullwerte:

session[:some_key].nil?

und stellen Sie sicher, dass gemeinsamer Code (z. B. in der application_controller.rb) Ihre Werte nicht überschreibt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X