用cookie与session两种方法实现用户登录:
一.用cookie方式实现:
实例化代码如下:
index.php主页代码:
实例
<?php $page_title = '首页'; include ('inc/header.php'); echo '<h2 style="color:red">我是首页</h2>'; if ((isset($_COOKIE['user_id'])) && basename($_SERVER['PHP_SELF']) != 'logout.php') { echo '<a href="logout.php">退出</a>'; } else { echo '<a href="login.php">登录</a>'; } include ('inc/footer.php');
运行实例 »
点击 "运行实例" 按钮查看在线实例
登录页面代码:
实例
<?php if ($_SERVER['REQUEST_METHOD'] == 'POST') { //加载公共函数库 require ('inc/function.php'); //连接数据库 require ('inc/connect.php'); //验证登录 //$check=true/false; $data=['user_id'=>$user_id, 'user_name'=>$user_name]; list($check, $data) = check_login($dbc, $_POST['email'], $_POST['password']); //验证通过 if ($check) { //设置cookies setcookie('user_id', $data['user_id']); setcookie('user_name', $data['user_name']); //跳转页面 redirect_user('loggedin.php'); } else { //验证失败 $errors = $data; } //关闭数据库连接 mysqli_close($dbc); } //加载 include('login_page.php');
运行实例 »
点击 "运行实例" 按钮查看在线实例
登录验证:
实例
<?php if (!isset($_COOKIE['user_id'])) { require ('inc/function.php'); //跳转到默认首页 redirect_user(); } //如果已经登录 //设置页面标题 $page_title = '已经登录'; include ('inc/header.php'); //打印欢迎信息,并提供退出功能 echo <<< "WELCOME" <h2 style="color:red">登陆成功</h2> <p>欢迎您: {$_COOKIE['user_name']}</p> <p><a href="logout.php">退出</a></p> WELCOME; //加载底部 include ('inc/footer.php');
运行实例 »
点击 "运行实例" 按钮查看在线实例
验证方法:
实例
<?php //登录公共函数库 /** * 用户自定义跳转地址 * @param string $page */ 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(); } /** * 验证用户登录 * @param $dbc * @param string $email * @param string $password */ 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); //返回查询结果 // print_r($row);exit(); return [true, $row]; } else { //查询失败 $errors[] = '邮箱或密码不正确,请重新输入'; } } return [false, $errors]; }
运行实例 »
点击 "运行实例" 按钮查看在线实例
运行结果如下:
二.用session来实现,方法大概和cookie相同,只不过session要在开始处开启session会话,以及使用session的函数语法
实例化代码如下:
首页代码:
实例
<?php session_start(); //开启会话 $page_title = '首页'; include ('inc/header.php'); echo '<h2 style="color:red">我是首页</h2>'; //if ((isset($_COOKIE['user_id'])) && basename($_SERVER['PHP_SELF']) != 'logout.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>'; } include ('inc/footer.php');
运行实例 »
点击 "运行实例" 按钮查看在线实例
登录页面代码:
实例
<?php //开启会话 session_start(); if ($_SERVER['REQUEST_METHOD'] == 'POST') { //加载公共函数库 require ('inc/function.php'); //连接数据库 require ('inc/connect.php'); //验证登录 //$check=true/false; $data=['user_id'=>$user_id, 'user_name'=>$user_name]; list($check, $data) = check_login($dbc, $_POST['email'], $_POST['password']); //验证通过 if ($check) { //设置cookies // setcookie('user_id', $data['user_id']); // setcookie('user_name', $data['user_name']); //设置session会话 $_SESSION['user_id'] = $data['user_id']; $_SESSION['user_name'] = $data['user_name']; //跳转页面 redirect_user('loggedin.php'); } else { //验证失败 $errors = $data; } //关闭数据库连接 mysqli_close($dbc); } //加载 include('login_page.php');
运行实例 »
点击 "运行实例" 按钮查看在线实例
登录方法代码:
实例
<?php //登录公共函数库 /** * 用户自定义跳转地址 * @param string $page */ 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(); } /** * 验证用户登录 * @param $dbc * @param string $email * @param string $password */ 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); //返回查询结果 // print_r($row);exit(); return [true, $row]; } else { //查询失败 $errors[] = '邮箱或密码不正确,请重新输入'; } } return [false, $errors]; }
运行实例 »
点击 "运行实例" 按钮查看在线实例
运行结果如下:
开启session会话:session_start();