Oh yes, changing IPs. I hear that WebTV terminals may have different IP addresses per each HTTP request. I suppose the specific behaviour you want on the event 'user A at station A is authenticated. user A at station B attempts to authenticate'. I handle that by expiring the original session and keeping the new one. You could take Robert's advice and force the user A at station A to logout first but that's a management headache. I use my SQL database to enforce timeouts. If you examine this PostgreSQL SQL code you'll notice that while the session records are stored in UserSession that checks for *valid* sessions are done agains the ValidSession view. That view ensures that stale sessions are not considered. The full database including schema may be downloaded from my home page at http://www.greentechnologist.org/downloads/jbj-0731.tgz. That's a reference to *one* possible implementation anyway.
CREATE TABLE UserSession ( SessionID INTEGER PRIMARY KEY, SessionDigest TEXT CHECK (length(SessionDigest) IN (40, 30)) NOT NULL, UserId INTEGER NOT NULL UNIQUE REFERENCES Users (ObjectId) ON DELETE CASCADE ON UPDATE CASCADE, Created TIMESTAMP NOT NULL DEFAULT current_timestamp, Modified TIMESTAMP NOT NULL DEFAULT current_timestamp ); -- Uninitialized and stale sessions don't appear CREATE VIEW ValidSession AS SELECT s.*, u.Username AS activeuser FROM UserSession AS s, ValidUsers AS u WHERE s.UserId = u.ObjectId AND s.Modified >= current_timestamp - '15 minutes'::interval AND s.SessionDigest != ''::text; Robert Landrum <[EMAIL PROTECTED]> 08/01/2002 02:28 PM To: "'[EMAIL PROTECTED]'" <[EMAIL PROTECTED]> cc: Subject: Re: [Newbie Q] Cleanest way to implement one logon per user? On Thu, Aug 01, 2002 at 03:08:40PM -0400, Baljit Sethi wrote: > Hello. > > I am hoping someone can point me in the right direction. > > What I want to do is limit client logons to one logon per username ie while > a client has a session open, he/she cannot logon to the website from another > terminal. The problem isn't determining when they've logged in, but determining when they've logged out. While it may be possible to write a record to the db that contains username, password, and IP address, it does not gaurentee that the user's ip address will not change mid session. (cable modem disconnect and reconnects with new ip, transparent to the user.) The short answer is, you can't. The long answer is that you can, but it takes way more work than it's worth. The only way I've seen is to set a cookie (encrypted) on the client's machine and flag the user as logged in. If the user tries to log in again (from anywhere), it rejects it. Only if the original client connects and clicks logout (and the cookie still exists) does it actually remove the flag (and the cookie). The drawback here is that if any user ever deletes their cookies before logging out, they're screwed, and will call asking you to fix it. Good luck, Rob