Module: Roda::RodaPlugins::Sessions::RequestMethods
- Defined in:
- lib/roda/plugins/sessions.rb
Instance Method Summary collapse
-
#persist_session(headers, session) ⇒ Object
Persist the session data as a cookie.
-
#session ⇒ Object
Load the session information from the cookie.
-
#session_created_at ⇒ Object
The time the session was originally created.
-
#session_updated_at ⇒ Object
The time the session was last updated.
Instance Method Details
#persist_session(headers, session) ⇒ Object
Persist the session data as a cookie. If transparently upgrading from Rack::Session::Cookie, mark the related cookie for expiration so it isn’t sent in the future.
263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 |
# File 'lib/roda/plugins/sessions.rb', line 263 def persist_session(headers, session) opts = roda_class.opts[:sessions] if session.empty? if env[SESSION_SERIALIZED] # If session was submitted and is now empty, remove the cookie Rack::Utils.(headers, opts[:key], opts[:remove_cookie_options]) # else # If no session was submitted, and the session is empty # then there is no need to do anything end elsif = _serialize_session(session) = Hash[opts[:cookie_options]] [:value] = [:secure] = true if !.has_key?(:secure) && ssl? before_size = if ( = headers[RodaResponseHeaders::SET_COOKIE]).is_a?(String) .bytesize else 0 end Rack::Utils.(headers, opts[:key], ) = case = headers[RodaResponseHeaders::SET_COOKIE] when String # Rack < 3 always takes this branch, combines cookies into string, subtract previous size # Rack 3+ takes this branch if this is the first cookie set, in which case before size is 0 .bytesize - before_size else # when Array # Rack 3+ takes branch if this is not the first cookie set, and last element of the array # is most recently added cookie .last.bytesize end if >= 4096 raise CookieTooLarge, "attempted to create cookie larger than 4096 bytes (bytes: #{cookie_size})" end end if env[SESSION_DELETE_RACK_COOKIE] Rack::Utils.(headers, opts[:upgrade_from_rack_session_cookie_key], opts[:upgrade_from_rack_session_cookie_options]) end nil end |
#session ⇒ Object
Load the session information from the cookie. With the sessions plugin, you must call this method to get the session, instead of trying to access the session directly through the request environment. For maximum compatibility with other software that uses rack sessions, this method stores the session in ‘rack.session’ in the request environment, but that does not happen until this method is called.
244 245 246 |
# File 'lib/roda/plugins/sessions.rb', line 244 def session @env[roda_class.opts[:sessions][:env_key]] ||= _load_session end |
#session_created_at ⇒ Object
The time the session was originally created. nil if there is no active session.
249 250 251 252 |
# File 'lib/roda/plugins/sessions.rb', line 249 def session_created_at session Time.at(@env[SESSION_CREATED_AT]) if @env[SESSION_SERIALIZED] end |
#session_updated_at ⇒ Object
The time the session was last updated. nil if there is no active session.
255 256 257 258 |
# File 'lib/roda/plugins/sessions.rb', line 255 def session_updated_at session Time.at(@env[SESSION_UPDATED_AT]) if @env[SESSION_SERIALIZED] end |