一个程序中login.php的代码

转自:http://club.21php.com/showthread.php?t=651

我只是想让大家看看cookie和session在有会员的程序注册或登录的程序中如何使用,虽然也不是最好的,但想能起到抛砖引玉的作用

PHP 代码:

session_start();
if(isset(
$HTTP_COOKIE_VARS['PHPSESSID'])) //如果有cookie变量PHPSESSIN
{
   
session_id($HTTP_COOKIE_VARS['PHPSESSID']); //取出PHPSESSID(就是session id),和服务器上对应的session建立连接
   
$PHPSESSID=$HTTP_COOKIE_VARS['PHPSESSID'];
}
else
$PHPSESSID=session_id(); //如果没有就重新生产一个新的session id
setcookie('PHPSESSID',$PHPSESSID,time()+3600*2400,$cookie_path); //设cookie,保存session id

if($HTTP_GET_VARS['islogout']!=1 && isset($HTTP_POST_VARS['name'])) //如果用户没有注销,并且存在由表单提交过来的用户名
{
   
$HTTP_SESSION_VARS['account']='guest'; //先把session变量account,也就是当前已经登录的用户名冲掉(这点我现在觉得不好),变成guest
   
$HTTP_SESSION_VARS['isadm']=0; //也是清掉,isadm是我这个程序表示是否为管理员的变量
   
$HTTP_SESSION_VARS['style']=$HTTP_GET_VARS['style']; //style是我的程序中表示当前用户的样式,也就是模板
   
$query='select * from ka_account where account="'.$HTTP_POST_VARS['name'].'";';
   
$result=mysql_query($query); //从数据库中取出该用户名的密码等信息
   
if(mysql_num_rows($result)==1) //如果找到一个匹配的
   
{
        
$rec=mysql_fetch_object($result);
        if(
$rec->banned!=1){  //如果用户没有被禁止
        
if(encrypt($HTTP_POST_VARS['passwd'])==$rec->passwd) //如果密码匹配,encrypt是我的加密函数,我使用了默认的md5
        
{
            
$HTTP_SESSION_VARS['account']=$rec->account;  //设当session变量account为这个用户
            
$HTTP_SESSION_VARS['isadm']=$rec->isadm;  //类似上面
            
$err="已登录";
        }
        else
$err="密码错误";
        }
        else
$err="账号被禁止";
    }
    else
$err="账号不存在";
}
if(
$HTTP_GET_VARS['islogout']==1) //如果用户在注销,就把所有的session变量设置成guest的
{
   
$HTTP_SESSION_VARS['account']='guest';
   
$HTTP_SESSION_VARS['isadm']=0;
   
$HTTP_SESSION_VARS['style']='default';
}

echo
$err;  显示出错信息  




这段代码里有个不好的地方,我还没有改,就是如果有人登录,再用别的帐号登录的话就会把原来的登录信息踢掉,而不是提示现在不能登录。还有,我没有判断提交页面是否为本服务器的页面。

呵呵,临时注释的,不知道清楚与否,如果有问题请跟帖

还有,我这个是适合php4.2以后版本的默认设置的,所有页面之间传递用的变量都是用新的表达方式,也适合以前版本。