首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >PHP教程之实战用户模块开发

PHP教程之实战用户模块开发

作者头像
老雷PHP全栈开发
发布2020-07-02 15:04:55
发布2020-07-02 15:04:55
8100
举报

用户模块知识点

本节实战内容 实现用户注册及登录功能,涉及cookie及session知识点

cookie

cookie 是由服务器发送到浏览器的变量。

setcookie(name,value,expire,path,domain,secure)

name 必需。规定 cookie 的名称。

value 必需。规定 cookie 的值。

expire 可选。规定 cookie 的有效期。

path 可选。规定 cookie 的服务器路径。

domain 可选。规定 cookie 的域名。

secure 可选。规定是否通过安全的 HTTPS 连接来传输 cookie。

代码语言:javascript
复制
    //设置
    setcookie("key","val", time()+3600*24,"/");
    setcookie("key","val", time()+3600*24,"/","school.com");
    //删除
    setcookie("key","val", time()-1,"/");
    //读取
    $_COOKIE["key"];

session

session 变量用于存储有关用户会话的信息,或更改用户会话的设置

它包含两部分:1.PHPSESSID 存储在用户cookie中 2.具体的值 存储到服务器中

使用session必须先开启

代码语言:javascript
复制
    session_start();
    $_SESSION["key"]="val";
    unset($_SESSION["key"]);

user表

代码语言:javascript
复制
    CREATE TABLE `sky_user` (
      `userid` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `username` varchar(32) NOT NULL DEFAULT '',
      `nickname` varchar(32) NOT NULL DEFAULT '',
      `password` varchar(32) NOT NULL DEFAULT '',
      PRIMARY KEY (`userid`)
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
代码语言:javascript
复制
<?php
session_start();
$a=isset($_GET["a"])?htmlspecialchars($_GET["a"]):"index";
require "db.class.php";
$user=new User($db);
$user->$a();
class User{
  public $db;
  public function __construct($db){
      $this->db=$db;
  }
  public function Index(){
     
    $this->tokenLogin();
    require "tpl/index.php";
  }
  public function Login(){
    
    require "tpl/login.php";
  }
  public function LoginSave(){
    $username=$_POST["username"];
    $password=$_POST["password"];
    if(empty($username) ){
      $msg="用户名不能为空";
      require "tpl/msg.php";
      exit;
    }
    $row=$this->db->getRow("select * from sky_user where username='".$username."' ");
    if(!$row){
      $msg="用户名{$username}不存在";
      require "tpl/msg.php";
      exit;
    }
    if(md5($password)!=$row["password"] ){
      $msg="账户密码出错";
      require "tpl/msg.php";
      exit;
    }
    
    $msg="登录成功";
    $_SESSION["ssuser"]=array(
      "userid"=>$row["userid"],
      "nickname"=>$row["nickname"]
    );
    //实现记住账号功能
    $token=$row["userid"].".".md5($row["userid"].$row["password"]);
    setcookie("ssToken",$token,time()+3600*24,"/");
    require "tpl/msg.php";
  }
  public function tokenLogin(){
    if(!isset($_SESSION["ssuser"])){
      if(isset($_COOKIE["ssToken"])){
        $token=$_COOKIE["ssToken"];
        $arr=explode(".",$token);
        $row=$this->db->getRow("select * from sky_user where userid='".intval($arr[0])."' ");
        if($arr[1]==md5($row["userid"].$row["password"])){
          $_SESSION["ssuser"]=array(
            "userid"=>$row["userid"],
            "nickname"=>$row["nickname"]
          );
        }
      }
    }
  }
  public function register(){
    require "tpl/register.php";
  }
  public function registerSave(){
    $username=$_POST["username"];
    $nickname=$_POST["nickname"];
    $password=$_POST["password"];
    $password2=$_POST["password2"];
    if(empty($username) || empty($nickname)){
      $msg="用户名或者昵称不能为空";
      require "tpl/msg.php";
      exit;
    }
    $row=$this->db->getRow("select * from sky_user where username='".$username."' or nickname='".$nickname."' ");
    
    if($row){
      $msg="用户名或者昵称已经存在";
      require "tpl/msg.php";
      exit;
    }
    if($password!=$password2){
      $msg="两次密码输入不一致";
      require "tpl/msg.php";
      exit;
    }
    $sql="insert into sky_user set
        username='".$username."',
        nickname='".$nickname."',
        password='".md5($password)."'
    ";
    $this->db->insert($sql);
    $msg="注册成功";
    require "tpl/msg.php";
    exit;
  }
  public function loginOut(){
    unset($_SESSION["ssuser"]);
    setcookie("ssToken",0,time()-10,"/");
    $msg="注销成功";
    require "tpl/msg.php";
  }
  
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老雷PHP全栈开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档