Blogger Information
Blog 28
fans 0
comment 0
visits 16429
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
Cookies 和 Session 登录-2018年04月23日00时20分
植树青年小江同志的博客
Original
770 people have browsed it


cookie 部分


common/connect.php


实例

<?php
//创建连接参数: 因为连接参数不会经常变化,所以推荐使用常量
define ('DB_HOST', 'localhost');
define ('DB_USER', 'root');
define ('DB_PASS', 'root');
define ('DB_NAME', 'php');
define ('DB_CHAR', 'utf8');

$dbc = @mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);

//连接失败一定会返回错误编号,可以根据编号判断,也可用 $db是否为false进行判断
if (mysqli_connect_errno($dbc)) {
    echo '连接失败'.mysqli_connect_error($dbc);
}

mysqli_select_db($dbc, DB_NAME);  //选择要操作的数据库
mysqli_set_charset($dbc, DB_CHAR); //设置客户端默认字符编码集

运行实例 »

点击 "运行实例" 按钮查看在线实例


index.php

实例

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>首页</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" type="text/css" media="screen" href="main.css" />
  <script src="main.js"></script>
  <style lang="">
    .title {
      margin: 0 auto;
      color: red;
      text-align: center;
    }
  </style>
</head>
<body>
  <h2 class="title">Cokkie 首页</h2>
  <?php
    if ((isset($_COOKIE['user_id'])) && basename($_SERVER['PHP_SELF']) != 'logout.php') {
      echo '<a href="logout.php">退出</a>';
    } else {
      echo '<a href="login.php">登录</a>';
    }
  ?>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例



login_page.php

实例

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>登录页</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" type="text/css" media="screen" href="main.css" />
  <script src="main.js"></script>
  <link href="https://cdn.bootcss.com/bootstrap/4.1.0/css/bootstrap.min.css" rel="stylesheet">
  <style lang="">
    .err_msg {
      margin: 0 auto;
      color: red;
      text-align: center;
    }
    .title {
      text-align: center;
    }

  </style>
</head>
<body>

<div class="container">
  <div class="row">
    <div class="header col-md-12 col-xs-12">
      <h2 class="title">Cokkie 登录页</h2>
    </div>
    
      <?php
        if (isset($errors) && !empty($errors )) {
          $errors_msg = '<p class="err_msg">';

          foreach ($errors as $msg) {
            $errors_msg .= $msg.'<br>';
          }
          echo $errors_msg.'</p>';
        }
      ?>

    <form action="login.php" method="post">
      <div class="form-group">
      
          <label for="email">邮箱:</label>
          <!--使用粘性表单技术在文本框中显示用户之前输入的内容,提升用户体验-->
          <input class="form-control" type="email" name="email" id="email" value="<?php echo  isset($_POST['email'])?$_POST['email']:'' ?>">
      </div>
      <div class="form-group">
          <label for="password">密码:</label>
          <input class="form-control" type="password" name="password" id="password" value="<?php echo  isset($_POST['password'])?$_POST['password']:'' ?>">
      </div>
      <div class="form-group">
        <button class="btn btn-lg btn-primary" type="submit" name="submit" id="submit">登录</button>
      </div>
    </form>
  </div>
</div>
  
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例


login.php

实例

<?php 

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  //连接数据库
  require ('common/connect.php');

  //验证登录
  list($check, $data) = check_login($dbc, $_POST['email'], $_POST['password']);

  // 验证通过
  if ($check) {
    //设置cookies
    setcookie('user_id', $data['data_id']);
    setcookie('user_name', $data['user_name']);

    // 跳转页面
    redirect_user('loggedin.php');
  }
   // 关闭数据库连接
  mysqli_close($dbc);
}

function check_login($dbc, $email='', $password='')
{
  // 初始化错误信息数组
  $errors = [];

  // 验证邮箱
  if (empty($email)) {
    $errors[] = '邮箱地址不能为空';
  } else {
    //mysqli_real_escape_string():转义字符串的特殊字符
    $e = mysqli_real_escape_string($dbc, trim($email));
  }

  // 验证密码
  if (empty($password)) {
      $errors[] = '密码不能为空';
  } else {
      $p = mysqli_real_escape_string($dbc, trim($password));
  }

  // 非空验证通过,即$error数组为空

  if (empty($errors)) {
    // 根据邮箱与密码来查询用户id与用户名
    $sql = "SELECT `user_id`,`user_name` FROM `user` WHERE `email`='$e' AND `password`=sha1('$p') ";

    // 执行查询
    $res = mysqli_query($dbc, $sql);

    // 返回记录

    if (mysqli_num_rows($res) == 1) {
      // 将查询结果解析到数组中
      $row = mysqli_fetch_array($res, MYSQLI_ASSOC);
;
      return [true, $row];
    } else {
      $errors[] = '邮箱或密码不正确,请重新输入';
    }
  }

  return [false, $errors];
}

function redirect_user($page = 'index.php')
{
   // 默认url格式
    $url = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);

    // 如果有,去掉url右侧的斜线
    $url = rtrim($url, '/\\');

    // 添加上当前的脚本名称,默认为:index.php
    $url .= '/'.$page;

    // 跳转到指定目标地址
    header('Location:'. $url);

    // 退出当前函数,这是一个好习惯,否则后面代码仍会执行,仅仅不会在当前页面输出罢了
    exit();
}

运行实例 »

点击 "运行实例" 按钮查看在线实例

logged.php

实例

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>已登录页</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" type="text/css" media="screen" href="main.css" />
  <script src="main.js"></script>
  <link href="https://cdn.bootcss.com/bootstrap/4.1.0/css/bootstrap.min.css" rel="stylesheet">
  <style lang="">
    .err_msg {
      margin: 0 auto;
      color: red;
      text-align: center;
    }
    .title {
      text-align: center;
    }

  </style>
</head>
<body>
<h1>已登录页</h1>



<?php
if (!isset($_COOKIE['user_id'])) {
    redirect_user();
}

//如果已经登录
//设置页面标题



//打印欢迎信息,并提供退出功能
echo <<< "WELCOME"
<h2 style="color:red">登陆成功</h2>
<p>欢迎您: {$_COOKIE['user_name']}</p>
<p><a href="logout.php">退出</a></p>
WELCOME;



function redirect_user($page = 'index.php')
{
   // 默认url格式
    $url = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);

    // 如果有,去掉url右侧的斜线
    $url = rtrim($url, '/\\');

    // 添加上当前的脚本名称,默认为:index.php
    $url .= '/'.$page;

    // 跳转到指定目标地址
    header('Location:'. $url);

    // 退出当前函数,这是一个好习惯,否则后面代码仍会执行,仅仅不会在当前页面输出罢了
    exit();
}
?>

</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例


logout.php

实例

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>登出页</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" type="text/css" media="screen" href="main.css" />
  <script src="main.js"></script>
  <link href="https://cdn.bootcss.com/bootstrap/4.1.0/css/bootstrap.min.css" rel="stylesheet">
  <style lang="">
    .err_msg {
      margin: 0 auto;
      color: red;
      text-align: center;
    }
    .title {
      text-align: center;
    }

  </style>
</head>
<body>
<h1>已登录</h1>



<?php
if (!isset($_COOKIE['user_id'])) {
  redirect_user();
} else {  
  //删除cookies
  setcookie('user_id', '', time()-3600);
  setcookie('user_name','', time()-3600);
}
//如果已经登录
//设置页面标题



//打印欢迎信息,并提供退出功能
echo <<< "WELCOME"
<h2 style="color:red">退出成功</h2>
<p><a href="login.php">登录</a></p>
WELCOME;




function redirect_user($page = 'index.php')
{
   // 默认url格式
    $url = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);

    // 如果有,去掉url右侧的斜线
    $url = rtrim($url, '/\\');

    // 添加上当前的脚本名称,默认为:index.php
    $url .= '/'.$page;

    // 跳转到指定目标地址
    header('Location:'. $url);

    // 退出当前函数,这是一个好习惯,否则后面代码仍会执行,仅仅不会在当前页面输出罢了
    exit();
}
?>

</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

SESSION 部分

index.php


实例

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>首页</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" type="text/css" media="screen" href="main.css" />
  <script src="main.js"></script>
  <style lang="">
    .title {
      margin: 0 auto;
      color: red;
      text-align: center;
    }
  </style>
</head>
<body>
  <h2 class="title">Cokkie 首页</h2>
  <?php
    if ((isset($_SESSION['user_id'])) && basename($_SERVER['PHP_SELF']) != 'logout.php') {
      echo '<a href="logout.php">退出</a>';
    } else {
      echo '<a href="login.php">登录</a>';
    }
  ?>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例


login_page.php

实例

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>登录页</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" type="text/css" media="screen" href="main.css" />
  <script src="main.js"></script>
  <link href="https://cdn.bootcss.com/bootstrap/4.1.0/css/bootstrap.min.css" rel="stylesheet">
  <style lang="">
    .err_msg {
      margin: 0 auto;
      color: red;
      text-align: center;
    }
    .title {
      text-align: center;
    }

  </style>
</head>
<body>

<div class="container">
  <div class="row">
    <div class="header col-md-12 col-xs-12">
      <h2 class="title">Cokkie 登录页</h2>
    </div>
    
      <?php
        if (isset($errors) && !empty($errors )) {
          $errors_msg = '<p class="err_msg">';

          foreach ($errors as $msg) {
            $errors_msg .= $msg.'<br>';
          }
          echo $errors_msg.'</p>';
        }
      ?>

    <form action="login.php" method="post">
      <div class="form-group">
      
          <label for="email">邮箱:</label>
          <!--使用粘性表单技术在文本框中显示用户之前输入的内容,提升用户体验-->
          <input class="form-control" type="email" name="email" id="email" value="<?php echo  isset($_POST['email'])?$_POST['email']:'' ?>">
      </div>
      <div class="form-group">
          <label for="password">密码:</label>
          <input class="form-control" type="password" name="password" id="password" value="<?php echo  isset($_POST['password'])?$_POST['password']:'' ?>">
      </div>
      <div class="form-group">
        <button class="btn btn-lg btn-primary" type="submit" name="submit" id="submit">登录</button>
      </div>
    </form>
  </div>
</div>
  
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

login.php

实例

<?php 

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  //连接数据库
  require ('common/connect.php');

  //验证登录
  list($check, $data) = check_login($dbc, $_POST['email'], $_POST['password']);

  // 验证通过
  if ($check) {
    // 设置session会话
    $_SESSION['user_id'] = $data['user_id'];
    $_SESSION['user_name'] = $data['user_name'];

    // 跳转页面
    redirect_user('loggedin.php');
  }
   // 关闭数据库连接
  mysqli_close($dbc);
}

function check_login($dbc, $email='', $password='')
{
  // 初始化错误信息数组
  $errors = [];

  // 验证邮箱
  if (empty($email)) {
    $errors[] = '邮箱地址不能为空';
  } else {
    //mysqli_real_escape_string():转义字符串的特殊字符
    $e = mysqli_real_escape_string($dbc, trim($email));
  }

  // 验证密码
  if (empty($password)) {
      $errors[] = '密码不能为空';
  } else {
      $p = mysqli_real_escape_string($dbc, trim($password));
  }

  // 非空验证通过,即$error数组为空

  if (empty($errors)) {
    // 根据邮箱与密码来查询用户id与用户名
    $sql = "SELECT `user_id`,`user_name` FROM `user` WHERE `email`='$e' AND `password`=sha1('$p') ";

    // 执行查询
    $res = mysqli_query($dbc, $sql);

    // 返回记录

    if (mysqli_num_rows($res) == 1) {
      // 将查询结果解析到数组中
      $row = mysqli_fetch_array($res, MYSQLI_ASSOC);
;
      return [true, $row];
    } else {
      $errors[] = '邮箱或密码不正确,请重新输入';
    }
  }

  return [false, $errors];
}

function redirect_user($page = 'index.php')
{
   // 默认url格式
    $url = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);

    // 如果有,去掉url右侧的斜线
    $url = rtrim($url, '/\\');

    // 添加上当前的脚本名称,默认为:index.php
    $url .= '/'.$page;

    // 跳转到指定目标地址
    header('Location:'. $url);

    // 退出当前函数,这是一个好习惯,否则后面代码仍会执行,仅仅不会在当前页面输出罢了
    exit();
}

运行实例 »

点击 "运行实例" 按钮查看在线实例


loggedin.php

实例

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>已登录页</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" type="text/css" media="screen" href="main.css" />
  <script src="main.js"></script>
  <link href="https://cdn.bootcss.com/bootstrap/4.1.0/css/bootstrap.min.css" rel="stylesheet">
  <style lang="">
    .err_msg {
      margin: 0 auto;
      color: red;
      text-align: center;
    }
    .title {
      text-align: center;
    }

  </style>
</head>
<body>
<h1>已登录页</h1>



<?php

session._start();

if (!isset($_SESSION['user_id'])) {
    redirect_user();
}

//如果已经登录
//设置页面标题



//打印欢迎信息,并提供退出功能
echo <<< "WELCOME"
<h2 style="color:red">登陆成功</h2>
<p>欢迎您: {$_SESSION['user_name']}</p>
<p><a href="logout.php">退出</a></p>
WELCOME;



function redirect_user($page = 'index.php')
{
   // 默认url格式
    $url = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);

    // 如果有,去掉url右侧的斜线
    $url = rtrim($url, '/\\');

    // 添加上当前的脚本名称,默认为:index.php
    $url .= '/'.$page;

    // 跳转到指定目标地址
    header('Location:'. $url);

    // 退出当前函数,这是一个好习惯,否则后面代码仍会执行,仅仅不会在当前页面输出罢了
    exit();
}
?>

</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例


logout.php


实例

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>登出页</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" type="text/css" media="screen" href="main.css" />
  <script src="main.js"></script>
  <link href="https://cdn.bootcss.com/bootstrap/4.1.0/css/bootstrap.min.css" rel="stylesheet">
  <style lang="">
    .err_msg {
      margin: 0 auto;
      color: red;
      text-align: center;
    }
    .title {
      text-align: center;
    }

  </style>
</head>
<body>
<h1>已登录</h1>



<?php
if (!isset($_SESSION['user_id'])) {
  redirect_user();
} else {  
  // 删除session
  session_destroy();
  setcookie('PHPSESSID','', time()-3600);
}
//如果已经登录
//设置页面标题



//打印欢迎信息,并提供退出功能
echo <<< "WELCOME"
<h2 style="color:red">退出成功</h2>
<p><a href="login.php">登录</a></p>
WELCOME;




function redirect_user($page = 'index.php')
{
   // 默认url格式
    $url = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);

    // 如果有,去掉url右侧的斜线
    $url = rtrim($url, '/\\');

    // 添加上当前的脚本名称,默认为:index.php
    $url .= '/'.$page;

    // 跳转到指定目标地址
    header('Location:'. $url);

    // 退出当前函数,这是一个好习惯,否则后面代码仍会执行,仅仅不会在当前页面输出罢了
    exit();
}
?>

</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例


Correction status:Uncorrected

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!