¿Cómo eliminar las sesiones anteriores en los carriles, si el usuario se olvide de cerrar la sesión y cerrar el navegador?
-
29-09-2019 - |
Pregunta
Me almacenar toda la información de sesión en la base de datos. El usuario puede iniciar sesión en el sistema para hacer algo. Hay alguna zona restringida se requiere inicio de sesión de usuario. Si el intento del usuario para llegar a aquellos área antes de inicio de sesión, el sistema le redirigirá a la página de inicio de sesión.
A veces el usuario puede cerrar el navegador sin cerrar la sesión. Si esto sucede, la próxima vez cuando se trate de inicio de sesión, el sistema no puede reconocer la sesión de nueva generación, incluso el usuario escribió en el nombre de usuario y la contraseña correctos. El sistema entonces forzar el inicio de sesión de usuario nuevo.
cualquier persona sabría cómo solucionar este problema? He intentado restablecer la sesión utilizando reset_session
antes de cargar la página de inicio de sesión. El problema no se puede solucionar.
controlador de la sesión
def new
end
def create
session[:current_account] = Account.authenticate(params[:email], params[:password])
if session[:current_account]
redirect_to :controller => "xxxxx", :action => "index"
else
flash[:notice] = "Please try again."
render :action => 'new'
end
end
Cuenta Modelo
def self.authenticate(email, pass)
account = find_by_email(email)
account && account.authenticated?(pass) ? account : nil
end
def authenticated?(pass)
encrypted_password == Account.encrypt(pass,salt)
end
Xxxxx Controller
before_filter :permission_handling
def index
end
Controlador de aplicación
def permission_handling
unless logged_in?
forced_login
end
end
def logged_in?
session[:current_account].is_a?(Account)
end
def forced_login
flash[:notice] = "You haven't login yet!"
redirect_to ( :controller => "sessions", :action => "new" )
end
Gracias a todos. :)
Solución
Parece que está almacenando un objeto de cuenta en la sesión. Esto no es recomendable: se debe almacenar valores simples, como el ID de la cuenta en la sesión
. Cambiar Model.authenticate
a account.id
retorno y comprobación logged_in
cargando la cuenta desde la base de datos en lugar de mantenerlo en la sesión.
No estoy seguro si esto se ocupa totalmente el problema, sin embargo, pero podría ser significativo.