2010-11-20 4 views
0

Ich habe einen Dienst, der eine Umfrage in eine Seite eingebettet werden kann. Diese Umfrage führt zu domainübergreifenden Ajax-Anrufen von Servern, die von wo auch immer gehostet werden.Cross-Domain-Sitzung Problem in Schienen

Der Dienst läuft auf Schienen 3. Ich versuche, den Index der letzten beantworteten Frage in einer Sitzung zu speichern. Der ActiveRecord-Speicher ist aktiv. Der Dienst wird auf Heroku gehostet. Ich habe die Sitzungstabelle migriert und geharkt.

Werte werden jedoch nicht in der Sitzung gespeichert. Ist das ein Problem, mit dem ich nicht umgehen kann, oder ist es möglich, dass Sitzungen auf diese Weise funktionieren?

Hier ist eine Darstellung des Problems:

Rails.logger.info { "session current stage is #{session[:current_stage]}" }  
session[:current_stage] = params[:current_stage].to_i 
session[:current_stage] ||= 0 
Rails.logger.info { "session current stage is #{session[:current_stage]}" } 

Ausgabe wie folgt aussieht:

session current stage is 0 
session current stage is 1 

Das nächste Mal läuft es (nach dem Sitzungswert ist 1):

session current stage is 0 
session current stage is 2 

Or ist es nur so, dass meine Sitzungen nicht richtig funktionieren, ohne Rücksicht auf domänenübergreifende Probleme?

Nur eine schnelle Ergänzung: Es scheint, dass eine einmalige Sitzung jedes Mal erstellt wird, wenn der Server getroffen wird und nicht beim nächsten Mal abgerufen wird. Es behandelt jeden Anruf als ein neues, beispielloses Ereignis. Ich nehme an, das ist ein Nebenprodukt der Kreuzdomain, die ich mache. Irgendwelche Lösungen?

+0

welche Art von Sitzung verwenden Sie? Plätzchen? Aktiver Rekord ? Andere ? – shingara

+0

Wie versuchen Sie, domainübergreifende Ajax-Anrufe zu tätigen? Da dies standardmäßig in jedem größeren Browser deaktiviert ist, was machst du dann, um Anfragen auf diese Weise zu machen? –

+0

Sind Cookies von Drittanbietern in dem Browser aktiviert, mit dem Sie testen? – molf

Antwort

0

Entschuldigung für die verzögerte Antwort - Cookies wurden ausgelöscht und die Spur dieser Frage verloren.

Ich verwende Cross-Domain-Anrufe über jQuery Ajax Anrufe, und die Verbindungen funktionieren gut. Ich rufe eine Initialisierungsroutine beim Laden der Seite auf, die den Remote-Server aufruft und ein JSON-Objekt erhält, mit dem ein Fragebogen erstellt wird, der im Browser ausgeführt wird und die Ergebnisse an den Server zurücksendet. Es enthält eine Reihe von Codes, die im JSON eingebettet sind, sodass keine Sitzungen mehr erforderlich sind. Aber wenn der Benutzer Seiten wechselt, muss der Server wissen, dass es eine Verbindung ist, die er bereits gesehen hat, wenn die nächste Seite den Init-Aufruf erhält.

Ich benutze ActiveRecord Sitzungen. Ich kann sehen, dass diese sich in der Sitzungstabelle ansammeln, und es scheint, dass jede neue Verbindung eine neue Sitzung erstellt. Diese Verbindungen sind fast alle über die Ajax-Verbindungen.

Ich schreibe Cookies über ein Skript auf der Seite eingebettet, die auch eine Verbindung mit dem Remote-Service, der eine Art von Persistenz-Mechanismus Roll-your-own verbindet vorschlagen einen Schlüssel vom Server, und dann nachsehen. Ich könnte wahrscheinlich IP-Prüfungen auf der Serverseite tun, um zu nähen, was jetzt getrennte Sitzungen zusammen sind, nehme ich an ...

+0

Dan, das ist keine "Antwort", es ist nur eine Klarstellung Ihrer Frage. Vielleicht sollten Sie nur Ihre Frage bearbeiten, um diese Informationen hinzuzufügen, und löschen Sie diese "Antwort". – edgerunner