2009-08-07 7 views

Odpowiedz

8

Problem polega na tym, że pliki cookie są stroną klienta. Uruchomienie zadania rake na twoim serwerze nie usunie oczywiście ciasteczek na wszystkich komputerach, które odwiedziły stronę.

W jakiś sposób możesz używać session.clear w kontrolerach? Masz jednak rację co do zmiany klucza cookie. Spowoduje to unieważnienie sesji należących do starego klucza. Będziesz musiał uratować się przed ActionController::StaleSession (lub coś podobnego), ale zadziałałoby.

+2

Tak, jak wspomniałem w swoim komentarzu, byłem w błędzie, że ciasteczko przechowuje tylko pewien rodzaj tokena sesji między klientem a serwerem i albo token jest również przechowywany po stronie serwera w celu sprawdzenia poprawności token klienta lub dane są po stronie serwera. Tymczasowo po prostu mam obejście mojego kodu, aby zignorować sesję. Być może najłatwiej jest przejść do przechowywania plików cookie opartych na bazach danych dla środowiska programistycznego (chcę wyczyścić sesje tylko w celach programistycznych). – user85509

3

Zdarza mi się teraz, że to, czego chcę, może nie być możliwe w zależności od sposobu wdrożenia sklepu z plikami cookie. Jeśli pliki cookie zawierają wszystkie informacje, których potrzebuje serwer (w tym podpis dla integralności danych), serwer nie musi przechowywać żadnych informacji na swojej stronie, dlatego nie ma możliwości unieważnienia istniejących plików cookie. Przyjęłam, że plik cookie zawierał klucz, który odpowiadał danym na serwerze, w celu sprawdzenia, czy plik cookie jest ważny, ale teraz zdaję sobie sprawę, że może tak nie być.

Jeśli jest to prawdą, jedynym sposobem na usunięcie plików cookie jest zmiana sekretu pliku cookie serwera służącego do podpisywania, a następnie prawdopodobnie ponowne uruchomienie procesu serwera.

+0

Zmieniono plik config.secret_token i zrestartowano serwer. Sesje na pliki cookie zostały zresetowane. Wynik. – patrickmcgraw

9

Zmień nazwę pliku cookie sesji. Nie usunie starych plików cookie, ale zmusi wszystkich do pobrania nowego pliku cookie sesji.

24

Jeśli używasz Cookie oparta sesje

Można zmienić secret_token swojej aplikacji Rails. Spowoduje to unieważnienie wszystkich istniejących sesji.

rake secret 

Następnie skopiować wartość do

RAILS_ROOT/config/initializers/session_store.rb 

to wszystko. Pamiętaj, aby ponownie uruchomić aplikację po tym;)

Jeżeli Jeśli używasz sesji opartych plików

rake tmp:sessions:clear 
+4

Musiałem skopiować wartość do secret_token.rb –

1

jeśli używasz to na korzystanie sesje oparte baz

rake db:sessions:clear 

serwer produkcyjny Polecam:

rake secret 

Po prostu generuje losowy bezpieczny token. Zadanie rake w zasadzie to robi, co można zrobić w konsoli.

Nigdy nie sprawdzaj klucza produkcyjnego w wersji kontrolnej/GIT, ale zamiast tego użyj zmiennej środowiskowej.Tak więc w pliku config/secrets.yml użyj czegoś takiego:

production: 
    secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> 
Powiązane problemy