¿Cómo eliminar las sesiones anteriores en los carriles, si el usuario se olvide de cerrar la sesión y cerrar el navegador?

StackOverflow https://stackoverflow.com/questions/3100305

  •  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. :)

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top