2010-09-04 11 views
7

¿Cómo puedo hacer para que solo 1 pueda estar en línea para el usuario 1 en ese momento? Idea ?PHP/SESSION: ¿Iniciar sesión uno por usuario?

¿Por lo tanto, por ejemplo, no puede iniciar sesión en el Usuario1 en una PC/navegador y luego en el otro inicio de sesión de la PC/navegador en Usuario1?

tengo mi communitysystem en PHP, y se almacena en sesiones ..

Respuesta

6

Puede almacenar la ID de sesión (y la última hora de acceso) en una base de datos y rechazar intentos de inicio de sesión para usuarios con ID de sesión diferentes si la última hora de acceso es demasiado reciente (por ejemplo, en los últimos 20 minutos). Borre la identificación al desconectarse, por supuesto.

Nota, sin embargo, si un usuario cierra su navegador sin cerrar la sesión y luego lo vuelve a abrir, pueden estar bloqueados por un tiempo (los 20 minutos anteriores, o el intervalo que decida), ya que no lo harán tener la cookie de sesión coincidente más.

3

No hay necesidad de usar sesiones. Simplemente haga una columna en su base de datos users si el usuario está conectado o no. Compruébalo desde allí.

La columna puede llamarse LoggedIn y puede ser enum ('Yes','No'). Además, almacenar el momento de la última entrada en alguna columna LastLoggedIn Así, cuando un usuario desea iniciar sesión, compruebe primero:

select 1 from users where ID = {$UserID} and `LoggedIn` = 'No' 

Si se devuelve una fila, lo dejó/su inicio de sesión.

Si alguien se olvida de cerrar la sesión:

Ejecutar una tarea programada o guión que restablecer el estado LoggedIn después de un período de tiempo de los usuarios que se registran en durante más de unas horas comprobando LastLoggedIn tiempo.

+0

Quiere asegurarse de que un usuario inicie sesión desde no más de una pc, es decir, invalidar otras sesiones cuando el usuario tenga una nueva sesión. @Karem, corrígeme si te equivoqué. – aularon

+1

Sin embargo, si alguien olvida cerrar la sesión, podría bloquearse de forma permanente. Y a menos que rastree la última hora de acceso, un trabajo cron estaría desconectando usuarios que todavía estaban activos. – cHao

+0

cHao justo lo que pensaba ... y no quiero eso ... – Karem

6

Supongo que guardas usuarios en una base de datos, agregas un campo active_session, lo actualizas al iniciar sesión y lo compruebas para asegurarte de que la identificación de la sesión del usuario coincida con la última almacenada en la base de datos.

El ingreso:

UPDATE `users` SET `active_session`='$session_id'; 

Cuando el usuario va a una página que requiere inicio de sesión, se busca que el valor:

SELECT * FROM users WHERE `active_session`='$session_id'; 

esta forma, si el usuario en otro lugar, la sesión anterior la clave se sobrescribe, y SELECCIONAR arriba devuelve un conjunto de resultados vacío.

0

La mejor manera de hacerlo es crear una columna adicional en su tabla de usuarios que se establece en 0 (falso) de manera predeterminada y cuando se inicia sesión se establece en 1 (verdadero). Luego, cuando el usuario cierra la sesión, reiníciela a 0. Ejecute un chequeo cada dos horas, lo que requiere que el usuario haga clic en Sí para continuar con la sesión o que se cierre automáticamente una vez que el temporizador de cuenta regresiva llegue a cero. El piso aquí es que cuanto más tiempo lo dejes hasta que ejecutes tu cheque, más tiempo tendrá que esperar un usuario para poder iniciar sesión nuevamente si salió de tu sitio y regresó sin tener que cerrar sesión correctamente, ya que la tabla de usuario todavía estaría verdadero hasta que se cierre la sesión. El efecto secundario es solicitar la entrada del usuario con más frecuencia contra la pérdida de acceso durante un período de tiempo mayor. Necesita ser pesado para que no sea molesto para el usuario. Puede detectar que el usuario ha salido de su sitio usando js y luego cerrar la sesión, pero el usuario puede apagarlo y, por lo tanto, no es confiable.

0

Tengo la misma tarea en la que solo quiero que el usuario tenga una sola sesión. Esto solo puede ser él/ella quien usa la cuenta, y no muchas otras personas.

La forma en que lo diseñé es que tengo una tabla en la que estoy almacenando el inicio y el final de la sesión. Esto se usará para que el usuario vea cuánto tiempo tomó la última visita y cuándo estuvo en línea por última vez.

Luego diseñé una tabla de sesiones donde estoy actualizando la hora/fecha cada vez que el usuario hace algo. Si el tiempo aquí es anterior a 30-60 minutos (aún no se ha decidido el intervalo), se eliminará el valor de la sesión. Esto para que el usuario pueda iniciar sesión nuevamente más tarde si decide hacerlo. Pero no dentro de la cerradura de 30-60 veces.

La tabla de sesiones será rastreada por un trabajo cron.

0

Mi idea sería continuar a partir de aquí la primera respuesta que he visto:

podría almacenar el identificador de sesión (y la hora del último acceso) en una base de datos, y rechazar los intentos de inicio de sesión para los usuarios con diferentes identificadores de sesión si el El último tiempo de acceso es muy reciente (por ejemplo, en los últimos 20 minutos). Borre la identificación al desconectarse, por supuesto.

Cree una columna current_session en la base de datos, cuando los usuarios inician sesión guarden la sesión actual en la tabla aquí asumimos que tenemos un tiempo de inicio de sesión configurado para 20 minutos y el usuario luego de iniciar sesión cierra su navegador y vuelve nuevamente en 10 minutos, así que aquí tenemos su sesión anterior, que es válida durante 20 minutos, pero en la última vez que cerró el navegador por lo que esta vez tendrá una nueva identificación de sesión, así que vamos a atrapar esta falta de coincidencia de sesión y le pediremos al usuario inicie sesión de nuevo eliminando el registro anterior que hemos conservado.

2

Solo para cualquiera que pueda necesitar esto en el futuro.

Cuando un usuario crea una sesión o inicia sesión, puede tomar el ID de sesión que genera y almacenarlo en una columna en su base de datos bajo la cuenta de ese usuario. Luego, en cada página de su aplicación, verifique si el ID de sesión actual coincide con el almacenado en la base de datos para ese usuario. Si no, elimine la sesión actual y redirija a una página de inicio de sesión.

De esta manera, la identificación de la sesión será diferente en cada dispositivo que están usando para iniciar sesión.

+0

¿Qué pasa si los usuarios comparten la misma cookie, por lo tanto, la misma sesión? – antoineg

Cuestiones relacionadas