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>
运行实例 »
点击 "运行实例" 按钮查看在线实例