前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP教程之实战用户模块开发

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

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

用户模块知识点

本节实战内容 实现用户注册及登录功能,涉及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 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档