具有树状结构的文本论坛(三)——用户登录部分

    下面介绍该论坛的用户登录部分,采用session来记录用户名username,如果username这个session变量已经注册了,则认为已经登录。下面看实现代码:
<?
  
//判断用户名、密码是否正确的函数(在funcdef.php文件中定义)
  
function checkuser($username$password)
  {
    if(!
$username || !$password)
    {
      return 
false;
    }
    if(!
file_exists("rec/userpsw"))
    {
       
$fp fopen("rec/userpsw""w+");
    }
    
$fp fopen("rec/userpsw""r+");
    while(!
feof($fp))
    {
      
$rows fgets($fp1024);
      
$rows trim($rows);
      
$recuser strtok($rows"t");
      
$recpsw strtok("t");
      if(
$recuser == $username)
      {
        
$namefound 1;
        if(
$recpsw == $password)
        {
          
fclose($fp);
          return 
true;
        }
      }
    }
    if(!
$namefound)//不存在该用户,则自动注册成为新用户
    
{
      
fwrite($fp"$usernamet$passwordn");
      
fclose($fp);
      return 
true;
    }
    
fclose($fp);
    return 
false;
  }
?>
    在主程序的最前面有登录和注销部分,通过判断$submit的值来进行登录和注销:
<?
 
//文件forum.php
  
@session_start();
  require(
"funcdef.php");    
  if(
$submit == "登录"
  {
    if(
checkuser($username$password) == true)
    {
      
session_register("username");    //注册$username变量
      
$headstr "Location:forum.php?".session_name()."=".session_id();
      
header($headstr);    //转跳回主页面
    
}
    else
    {
      include(
"loginerr.php");    //显示登录错误的信息
    
}
  }
  if(
$submit == "注销")
  {
    
session_unregister("username");    
    
$headstr "Location:forum.php?".session_name()."=".session_id();
    
header($headstr);
  }
?>
    用户可以在主界面上登录,也可以在发帖子的时候才输入名字、密码来登录,两者的效果是完全相同的。至于在发帖子时登录的代码会在后面给出。
    下次将介绍主题列表部分的代码。(未完待续)