博客列表 >Cookies 和 Session 登录-2018年04月23日00时20分

Cookies 和 Session 登录-2018年04月23日00时20分

植树青年小江同志的博客
植树青年小江同志的博客原创
2018年04月23日 00:39:45769浏览


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>

运行实例 »

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


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议