一个程序中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以后版本的默认设置的,所有页面之间传递用的变量都是用新的表达方式,也适合以前版本。