我原来开发过一些网站,也比较关心用户登陆的机制。谈谈我的一些看法。
我觉得用session记录是非常方便的,但是session是耗内存的,而且在需要跨服务器时需要额外的支持。所以我用cookie加数据库的形式模拟session。我在用户登陆时写2个cookie,一个是用户名还有一个是用md5编码的随机字符串,并在A_loginUsers表中记录用户名,用户次登陆的IP,登陆时产生的随机字符串以及登陆时间。
然后在每个需要登陆的页面我都会用以下sql语句验证:
"select lastChkTime from A_loginUsers where userName='"
+SuccessUserName+"' and rndChkFlag='"+abSimulateSession+
"' and userIP='"+getUserREMOTE_ADDR+"' and DATE_ADD
(lastChkTime,INTERVAL 1200 SECOND)>='"+nowTime+"'"
SuccessUserName是存在客户端中的cookie,abSimulateSession是登陆时写在客户端的随机字符串。getUserREMOTE_ADDR是取得现在用户的IP。只要这3项有任何一项不符,就认为是非法登陆。这样用户即使能更改cookie中的用户名,因为随即码不同也不能登陆。
+"' and DATE_ADD(lastChkTime,INTERVAL 1200 SECOND)>=
'"+nowTime+"'"
是判断用户是否登陆超时。如果不需要超时判断可以将这句去除。
以上是我习惯用的用户登陆机制,如果有更好的,效率更高的方法请提出来让我学习学习啊,大家一起进步