最近在二次开发织梦系统的会员功能;要求会员帐号有期限,开始时间以会员添加时间为开始,这样登录的时候需要判断帐号是否过期,原本的织梦系统中是通过$rs = $cfg_ml->CheckUser($userid,$pwd);来检查帐号信息的:
if($rs==0)
{
ResetVdValue();
ShowMsg("用户名不存在!", "index.php", 0, 2000);
exit();
}
else if($rs==-1) {
ResetVdValue();
ShowMsg("密码错误!", "index.php", 0, 2000);
exit();
}
else if($rs==-2) {
ResetVdValue();
ShowMsg("管理员帐号不允许从前台登录!", "index.php", 0, 2000);
exit();
}
else
{
//当$rs=1时会员帐号登录,但是一开始我对织梦的代码不是特别的熟悉,于是我是想着在这里判断帐号有没有过期,过期则提示会员帐号过期,联系管理员,但是测试的时候发现会提示会员帐号过期,但是同时过期的帐号还是会登录,后来我明白了其实在最上面检查帐号时,只要$rs=1时其实帐号就已经登录了,所以过期账号在下面这块判断是没有用的,必须在检查账号的那里判断;
// 清除会员缓存
$cfg_ml->DelCache($cfg_ml->M_ID);
if(empty($gourl) || preg_match("#action|_do#i", $gourl))
{
ShowMsg("成功登录,5秒钟后转向系统主页...","index.php",0,2000);
}
else
{
$gourl = str_replace('^','&',$gourl);
ShowMsg("成功登录,现在转向指定页面...",$gourl,0,2000);
}
exit();
}
分析过后的会员过期帐号不让登录的代码:
if($pwd=='')
{
ResetVdValue();
ShowMsg("密码不能为空!","-1",0,2000);
exit();
}
//判断帐号是否过期
$loginip = GetIP();
$arr=$dsql->GetOne("SELECT `exptime`,`jointime`,`loginip` FROM `#@__member` WHERE `userid` = '$userid' and `pwd`=md5($pwd) ");
$now=(time()-$arr['jointime'])/(24*3600);
if(!$arr){
ShowMsg("你输入的用户名和密码错误","-1",0,2000);
}else{
if($now<=$arr['exptime']){
$rs = $cfg_ml->CheckUser($userid,$pwd);
}else{
ShowMsg("登录失败,帐号过期,请联系管理员",'-1',0,2000);
exit();
}
}
在会员登录时还需要实现一个帐号不能再不同ip下登录;
if($rs==0)
{
ResetVdValue();
ShowMsg("用户名不存在!", "index.php", 0, 2000);
exit();
}
else if($rs==-1) {
ResetVdValue();
ShowMsg("密码错误!", "index.php", 0, 2000);
exit();
}
else if($rs==-2) {
ResetVdValue();
ShowMsg("管理员帐号不允许从前台登录!", "index.php", 0, 2000);
exit();
}
else
{
// 判断帐号是否登陆
$cfg_ml->DelCache($cfg_ml->M_ID);
if(empty($gourl) || preg_match("#action|_do#i", $gourl))
{
ShowMsg("成功登录,5秒钟后转向系统主页...","index.php",0,2000);
}
else
{
$gourl = str_replace('^','&',$gourl);
ShowMsg("成功登录,现在转向指定页面...",$gourl,0,2000);
}
$loginip = GetIP();
@session_start();//启动session
$_SESSION['userid'] = $userid;
$dsql->ExecuteNoneQuery("UPDATE @__member SET `login`='$loginip' WHERE `userid`='$userid'");
exit();
}
}