I am using a slightly different session modul with a small and dirty
Camping hack for implemeting the Remember me function (used on
http://dekk.hu/).
@headers["Set-Cookie"[EMAIL
PROTECTED]|k,v|"#{k}=#{k=~/_sid$/?v:C.escape(v)};#{"max-age=0;"if
!v}path=#{self/'/'}"if [EMAIL PROTECTED];
Camping does not escape a cookie variable if its name ends with "_sid",
so i can add after the session_id a max_age value as described below in
remember_me and forget_me functions. (The "application" function gets
only the name of the the app.)
module Camping
module WigwamSession
include Camping::Helpers
def sessioncookie
"#{application.to_s.downcase}_sid"
end
def remember_me
@cookies[sessioncookie] = @session_id + ';max-age=31536000'
end
def forget_me
@cookies[sessioncookie] &&= @session_id + ';max-age=0'
end
def service(*a)
session = Camping::Models::WigwamSession.find_by_sessionid
@cookies[sessioncookie] if @cookies[sessioncookie]
if session
@session_id = session.sessionid
@state = session.variables
else
@session_id = [*0..31].map { ([*'A'..'Z'] + [*'a'..'z'] +
[*'0'..'1'])[rand(62)] }.join
@state = Camping::H[]
end
@cookies[sessioncookie] = @session_id
state = @state.dup
s = super(*a)
if @state.empty?
session.destroy if session
elsif @state != state
unless session
Camping::Models::WigwamSession.create :sessionid =>
@session_id, :variables => @state
else
session.variables = @state
session.save
end
end
s
end
end
end
The possibility of adding "max-age" value for a cookie in the new
version of Camping without hack the original source would be really great...
Greetings, Bence
--
Nagy Bence
-> Tipográl | www.tipogral.hu
-> Tipokert | www.tipokert.hu
-> Dekk | www.dekk.hu
-> Magyar Grafika | www.mgonline.hu
-> Hírkapu | www.hirkapu.hu
_______________________________________________
Camping-list mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/camping-list