Article View: es.comp.os.linux.programacion
Article #11320Re: control de acceso con apache
From: Xavier Montero
Date: Fri, 07 Dec 2001 19:18
Date: Fri, 07 Dec 2001 19:18
80 lines
5163 bytes
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-mailReferences:
<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