Wygasanie sesji na koniec tygodnia

Wymarzyłem sobie wygasanie sesji (najprostsze CookieStore) na koniec tygodnia.
Tzn user przychodząc po weekendzie zawsze dostanie nowe cookie.
A po następnym weekendzie znowu nowe cookie.
Itd.

Coś takiego:

ActionController::Base.session = { [...] :expires => Time.now.end_of_week }
…działa, ale tylko do końca pierwszego tygodnia. Lambdy wstawić do parametru :expires nie pozwalają.

Jak można by toto zrobić?

Dzięki!

Jeśli pytanie było bez sensu to mówcie, nie pogniewam się :slight_smile:

Możesz w sesji przechowywać informację kiedy została utworzona i czyścić ją po weekendzie.

Dzięki, tak będę musiał zrobić.

Ale aż by się tam prosiła lambda, czy nie?

Zawsze mozesz zrobic NiedzielnyCookieStore < CookieStore ktory bedzie mial wlasna implementacje metody call :slight_smile: Poczytaj jak to wyglada w CookieStore i tam gdzie masz :expires zmien sobie na na cos z lambda ? :slight_smile:

Albo zrobic cos z set_session_options tutaj jest ustawianie wygasniecia sesji per kontroller http://squarewheel.wordpress.com/2007/11/03/session-cookie-expiration-time-in-rails/ wiec mozna by zrobic to samo ogolnie dla ApplicationController ? Np

session :session_expires_after => lambda { Time.now }

a w srodku

( session_expires_after.is_a?(Proc) ? session_expires_after.call : session_expires_after.to_s )

zamiast

session_expires_after.to_s

Ogolnie to nadawalo by sie to imho na łatke do rails :wink: jesli sie tak faktycznie da :stuck_out_tongue:

@PaK: słusznie prawisz :slight_smile: faktycznie zrobiłem dziedziczenie i mam swoją wymarzoną lambdę :stuck_out_tongue:

module Czak class ExtendedCookieStore < ActionController::Session::CookieStore private # patrz actionpack-2.3.2/lib/action_controller/session/cookie_store.rb l. 123 # Should be in Rack::Utils soon def build_cookie(key, value) [...] expires = value[:expires].is_a?(Proc) ? value[:expires].call : value[:expires] expires = "; expires=" + expires.clone.gmtime.strftime("%a, %d-%b-%Y %H:%M:%S GMT") if expires [...] end end end

[code=ruby]ActionController::Base.session = {
[…]
:expires => lambda { Time.now.end_of_week }
}

ActionController::Base.session_store = Czak::ExtendedCookieStore[/code]
Dzięki! :slight_smile: