Witam, kilka dni temu rozpocząłem swoją naukę railsów. W jednym z tematów znalazłem informacje od jakich pozycji powinienem zacząć i tak jak polecaliście zacząłem od Agile Web Development with Rails (edycja trzecia). Jak do tej pory wszystko szło mi bardzo pomyślnie i jestem pozytywnie zaskoczony prostotą railsów. Natomiast napotkałem problem na stronach 107-108 (zapisywanie sesji w bazie danych). Mam teraz pytanie. W książce mam w pliku environment.rb który znajduje się w katalogu config usunąć komentarz z linii :
która jest okomentowana tak samo jak ta podana w książce więc przypuszczam, że to o nią właśnie chodzi.
Dalej jednak mam w pliku app/controllers/application.rb odkomentować linię"
natomiast u mnie znowu nie ma tej pierwszej linii a plik nazywa się application_controller.rb (ale to chyba nie ma znaczenia)
natomiast w pliku config/initializers/session_store.rb znajduje się taki kod
i teraz się zastanawiam gdzie co dodać żeby to działało, domyślam się iż problem polega na tym, że pracuję na nowszej wersji railsów i niektóre elementy uległy zmianie. Czy ktoś mógłby mnie nakierować na poprawne rozwiązanie tego problemu tak bym mógł kontynuować naukę ?
Z góry dzięki za pomoc.
Dlaczego chcesz użyć sesji zapisywanej w bazie? Rozumiesz konsekwencje związaną z koniecznością czyszczenia takiej tabeli? Domyślnie sesja trzymana jest w ciasteczku - do przechowywania ID/maila użytkownika czy innych dupereli powinno to w zupełności wystarczyć, a nie ma problemu z expirowaniem tych danych.
Używam railsów 2.3.8, nie wiem jeszcze jak przechowywać sesję w ciasteczkach, chciałem postępować tak jak jest w książce jednak występują te małe rozbieżności przez co trochę się pogubiłem.
Przechowywanie sesji w ciasteczku jest ustawione domyślnie, więc nie musisz nic zmieniać, żeby działało.
Co do różnic między ciasteczkiem, a bazą danych, to w bardzo dużym skrócie:
sesje w bazie danych są wolniejsze
sesje w cookies teoretycznie można podejrzeć dlatego nie należy tam trzymać jakichś ważnych danych, np. numerów kart kredytowych (aczkolwiek nie da się ich zmienić, więc admin=true można bez problemu).
Na razie proponuję zostać przy cookies, nie ma po co się męczyć Co oznacza: nie musisz nic zmieniać.
protect_against_forgery możesz wstawić w application_controller - to jest ochrona przed atakami CSRF, użyj googla jak chcesz więdzieć coś więcej na ten temat. Tylko nie musisz dodawać :secret, samo protect_against_forgery wystarczy.
Co do reszty rozbieżności, to tak jak zauważyłeś ustawienia poleciały do initialziers, możesz zostawić je tak jak obecnie wyglądają, z jednym wyjątkiem, zmień :secret, który jest ustawiony w sesji (na inny losowy ciąg znaków o podobnej długości). Znając go ktoś ma pełny dostęp do Twoich sesji w ciasteczkach.
Są to ustawienia domyślne, ale nie wiem czy zalecane Wszystko zależy od potrzeb. Jest to na pewno metoda wydajniejsza i prostsza do konfiguracji (nie wymaga active recordu), ale masz też mniejszą kontrolę nad sesjami. Nie możesz np. w każdej chwili wyczyścić sesji.
pewnie gdyby zmienić ActionController::Base.cookie_verifier_secret sesje przechowywane w cookies u użytkowników stały by się nieważne ? Ale to chyba doszło dopiero w Railsach 3.0