Estoy intentando crear para mi aplicación una medida de seguridad
referente a la expiracion de las sesiones. Lo que quiero es que una
sesion finalice si ha estado 15 minutos sin refrescarse o lleva 12 horas
ya creada. Por ahora tengo lo siguiente:
class Session < ActiveRecord::Base
def self.sweep(time_ago = nil)
time = case time_ago
when /^(\d+)m$/ then Time.now - $1.to_i.minute
when /^(\d+)h$/ then Time.now - $1.to_i.hour
when /^(\d+)d$/ then Time.now - $1.to_i.day
else Time.now - 1.hour
end
self.delete_all “updated_at < ‘#{time.to_s(:db)}’ OR
created_at < ‘#{12.hour.ago.to_s(:db)}’”
end
end
flash[:notice] = “Por favor, introduzca el primer usuario en el
sistema”
else
flash[:notice] = “Por favor, identifiquese”
end
redirect_to(:controller => :users, :action => :login)
end
end
La cuestión es que navego por la aplicación, la dejo durante más de 15
minutos, realizo una acción y me permite realizarla, pero la que va
inmediatamente posterior no. ¿Cómo es que no me corta en la primera
acción pasado los 15 minutos? Se supone que Session.sweep(“15m”) ha
borrado la session de la base de datos.
La cuestión es que navego por la aplicación, la dejo durante más de 15
minutos, realizo una acción y me permite realizarla, pero la que va
inmediatamente posterior no. ¿Cómo es que no me corta en la primera
acción pasado los 15 minutos? Se supone que Session.sweep(“15m”) ha
borrado la session de la base de datos.
solo se me ocurre una cochinada, cuando pasen los 15min redireccionate a
otra pagina, esa seria la accion que te permite realizar, por lo tanto
cuando intentes realizar una segunda accion tampoco te dejara.
La cuestión es que navego por la aplicación, la dejo durante más de 15
minutos, realizo una acción y me permite realizarla, pero la que va
inmediatamente posterior no. ¿Cómo es que no me corta en la primera
acción pasado los 15 minutos?
Sospecho que es porque el objeto sesion esta ya creado antes de que se
ejecuten esos filtros, y la app trabaja con el al margen de lo que se
haya borrado en base de datos.
Apuesto de todas maneras a que existen plugins que resuelven esto.
¿HabrÃa alguna forma de forzar a rails a cargar de nuevo los valores de
session? Es decir:
def authorize
Session.sweep(“15m”) #cargar nuevos valores de session por si ha sido borrada la sesion
unless User.find_by_id(session[:user_id])
reset_session
session[:original_uri] = request.request_uri
if(User.count == 0)
flash[:notice] = "Por favor, introduzca el primer usuario en el
sistema"
else
flash[:notice] = “Por favor, identifiquese”
end
Sospecho que es porque el objeto sesion esta ya creado antes de que se
ejecuten esos filtros, y la app trabaja con el al margen de lo que se
haya borrado en base de datos.
Ya me he decidido por un plugin. Limited Sessions. Pero el seguir con lo
de antes era mas bien por cabezonerÃa y por profundizar un poco mas en
las sesiones. A ver que tal va el plugin este.