🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #11320

Re: control de acceso con apache

#11320
From: Xavier Montero
Date: Fri, 07 Dec 2001 19:18
80 lines
5163 bytes
Y tienes PHP y MySQL? Con eso ser�a f�cil. En cualquier caso,
las cookies no me gustan. Te recomeindo lo siguiente:

Cuando entre un tipo en una p�gina, miras si arrastra una
variable de "sesi�n" que t� te inventas (por ejemplo miras
si "SessionID" tiene un valor diferente a cadena nula. Si
es cadena nula, le asignas un valor aleatorio entre
"AAAAAAAA" y "ZZZZZZZZ" y compruebas que lo que te sale (por
ejemplo "HTWBGSYQ" no est� asignado a otro usuario (en MySQL
en una tabla, o en perl en un archivo normal del filesystem
en la que llevas un tracking de sesiones). Si est� usado,
generas otro y vuelves a comprobar.

Una vez tienes el n�mero de sesi�n, lo escribes en el
archivo y lo marcas como "no-logged" y lo pasas de p�gina
en p�gina. Si en alg�n instante el usuario se loggea,
entonces lo marcas como "logged", escribes su log y
la fecha completa (con hora) del registro.

Cada vez que entras en una p�gina miras si ha caducado,
si no ha caducado, vuelves a escribir la fecha actual
para "refrescar" el timeout. Si ha caducado, lo marcas
como "no-logged" y contin�as procesando la p�gina. Puedes,
si lo deseas, crearte un estado intermnedio de "logging-out"
en el que muestras p�ginas del tipo "estaba registrado
pero se transfiere el control al sistema a modo 'no
registrado'".

L�gicamente esto en MySQL es m�s f�cil que en un archivo.
Ah� va alguna de mis cosas:

mysql> describe user;
+-------------+---------------+------+-----+---------+----------------+
| Field       | Type          | Null | Key | Default | Extra          |
+-------------+---------------+------+-----+---------+----------------+
| id          | int(11)       |      | PRI | 0       | auto_increment |
| partition   | int(11)       |      | MUL | 1       |                |
| user        | varchar(16)   |      |     |         |                |
| passwd      | varchar(16)   | YES  |     | NULL    |                |
| email       | text          | YES  |     | NULL    |                |
| created     | datetime      | YES  |     | NULL    |                |
| lastupdated | timestamp(14) | YES  |     | NULL    |                |
| demo        | enum('y','n') |      |     | n       |                |
| expires     | int(11)       | YES  |     | NULL    |                |
+-------------+---------------+------+-----+---------+----------------+
9 rows in set (0.01 sec)

mysql> describe session;
+-------------+---------------+------+-----+---------+-------+
| Field       | Type          | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+-------+
| user        | int(11)       | YES  |     | NULL    |       |
| created     | datetime      | YES  |     | NULL    |       |
| lastupdated | timestamp(14) | YES  |     | NULL    |       |
| sessionid   | char(64)      | YES  |     | NULL    |       |
| ip          | int(11)       | YES  |     | NULL    |       |
| expires     | int(11)       | YES  |     | 20      |       |
+-------------+---------------+------+-----+---------+-------+
6 rows in set (0.06 sec)

mysql>

El session.user es el user.id (que no es el username, para permitir
que los usuarios se puedan cambiar el username (user.user), pero esto
no viene al caso, s�lo es para que se entienda).

El valor que me interesa siempre es el "expires" sumado a
"lastupdated". Pongo el expires a 20 minutos por defecto
pero esto me permite que una p�gina pueda decir "caduco
en una hora" o "caduco en 1 minuto". El tema "IP" es para
evitar "fakes" y otras cosas raras. Es decir, si una sesi�n
detecta un cambio de IP se autodestruye y queda como "logout".
No funciona en los cybers que hacen NAT pero algo es algo, dijo
un calvo. El created no afecta para el ejemplo, que no despiste.
S�lo es que me interesaba saber "cu�nto rato" lleva el usuario
conectado". Se actualiza s�lo cuando pasa de estado no
registrado (user=NULL) a s� registrado (user= not null).

Saludos.
Xavi.
Technical Details
Message-ID: <3C111610.353C9467@dsitelecom.com>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!fr.clara.net!heighliner.fr.clara.net!opentransit.net!newsfeed.comtenidos.com!newsfeeder.wanadoo.es!news.antakira.com!not-for-mail
References: <3690becc.0112050823.23135330@posting.google.com>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: f86c8,ebdb4e3b7fe50cc7
X-Google-Attributes: gidf86c8,public
X-Google-ArrivalTime: 2001-12-07 12:06:04 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!fr.clara.net!heighliner.fr.clara.net!opentransit.net!newsfeed.comtenidos.com!newsfeeder.wanadoo.es!news.antakira.com!not-for-mail
From: Xavier Montero <xmontero@dsitelecom.com>
Newsgroups: es.comp.os.linux.programacion
Subject: Re: control de acceso con apache
Date: Fri, 07 Dec 2001 20:18:40 +0100
Organization: Digital Sound Items
Lines: 80
Message-ID: <3C111610.353C9467@dsitelecom.com>
References: <3690becc.0112050823.23135330@posting.google.com>
NNTP-Posting-Host: 212.25.147.135
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
X-Trace: news.wanadoo.es 1007755270 18257 212.25.147.135 (7 Dec 2001 20:01:10 GMT)
X-Complaints-To: usenet@wanadoo.es
NNTP-Posting-Date: Fri, 7 Dec 2001 20:01:10 +0000 (UTC)
X-Mailer: Mozilla 4.77 [en] (Windows NT 5.0; U)
X-Accept-Language: en