今天是第十六天上课,朱老师主要通过一个登录案例讲了cookie与session的使用原理。

一、登录用cookie保存用户信息,由于页面较多,就放几个重要页面。

1. 首页index.php

实例

<?php
$page_title = '首页';
//导入公共头部
include 'inc/header.php';

echo '<h2 style="font-size:1rem;color: cornflowerblue;text-align: center">首页</h2>';
//echo $_SERVER['PHP_SELF'];
//判断用户是否登录? 存在cookie并且当前页面不是退出页面
echo '<p style="text-align: center">';
if(isset($_COOKIE['id']) && basename($_SERVER['PHP_SELF']) != 'logout.php') {
    echo '<a href="logout.php">退出</a>';
}else{
    echo '<a href="login.php">登录</a>';
}
echo '</p>';

//导入页面公共底部
include 'inc/footer.php';
?>

运行实例 »

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

效果图:index.png

2. 登录页login.php

实例

<?php


if($_SERVER['REQUEST_METHOD'] == 'POST'){
    require('inc/function.php');
    require('inc/connect.php');

    //因为返回的是数组,所以用list()来将其赋值到变量
    list($check,$data) = check_login($dbc,$_POST['email'],$_POST['password']);
    //检测是否验证通过
    if($check){
        setCookie('id',$data['id']);
        setCookie('name',$data['name']);
        //跳转
        redirect_user('login_success.php');

    }else{
        $errors = $data;

    }
    mysqli_close($dbc);
}

include 'login_page.php';

运行实例 »

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

效果图:login.png

3.登录成功页login_success.php

实例

<?php
/**
 * 登陆成功页面
 */

if(!isset($_COOKIE['id'])){
    require 'inc/function.php';
    redirect_user();
}
$page_title = '登录成功';
include 'inc/header.php';

echo <<< "WELCOME"
<h2 style="font-size:1rem;color: cornflowerblue;text-align: center">登录成功</h2>
<p style="text-align: center">欢迎您: 尊敬的 {$_COOKIE['name']}</p>
<p style="text-align: center"><a href="logout.php" >退出</a></p>
WELCOME;


//导入页面公共底部
include 'inc/footer.php';

运行实例 »

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

效果图:login_success.png

4. 退出登录页logout.php

实例

<?php
/**
 * 登录退出页面
 */

if(!isset($_COOKIE['id'])){
    require 'inc/function.php';
    redirect_user();
}else{
    setcookie('id','',time()-3600);
    setcookie('name','',time()-3600);//删除cookie
}
$page_title = '退出成功';
include 'inc/header.php';

echo <<< "LOGOUT"
<h2 style="font-size:1rem;color: cornflowerblue;text-align: center">退出成功</h2>
<p style="text-align:center"><a href="login.php">登录</a></p>
LOGOUT;


//导入页面公共底部
include 'inc/footer.php';

运行实例 »

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

    效果图:logout.png

二、登录用session保存用户信息,效果一样

1. 首页index.php

实例

<?php
session_start();
$page_title = '首页';
//导入公共头部
include 'inc/header.php';


echo '<h2 style="font-size:1rem;color: cornflowerblue;text-align: center">首页</h2>';
//echo $_SERVER['PHP_SELF'];
//判断用户是否登录? 存在cookie并且当前页面不是退出页面
echo '<p style="text-align: center">';
if(isset($_SESSION['id']) && basename($_SERVER['PHP_SELF']) != 'logout.php') {
    echo '<a href="logout.php">退出</a>';
}else{
    echo '<a href="login.php">登录</a>';
}
echo '</p>';

//导入页面公共底部
include 'inc/footer.php';
?>

运行实例 »

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

2. 登录页login.php

实例

<?php
session_start();

if($_SERVER['REQUEST_METHOD'] == 'POST'){
    require('inc/function.php');
    require('inc/connect.php');

    //因为返回的是数组,所以用list()来将其赋值到变量
    list($check,$data) = check_login($dbc,$_POST['email'],$_POST['password']);
    //检测是否验证通过
    if($check){
        $_SESSION['id'] = $data['id'];
        $_SESSION['name'] = $data['name'];
        //跳转
        redirect_user('login_success.php');

    }else{
        $errors = $data;

    }
    mysqli_close($dbc);
}

include 'login_page.php';

运行实例 »

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

3. 登录成功页login_success.php

实例

<?php
/**
 * 登陆成功页面
 */

if(!isset($_SESSION['id'])){
    require 'inc/function.php';
    redirect_user();
}
$page_title = '登录成功';
include 'inc/header.php';

echo <<< "WELCOME"
<h2 style="font-size:1rem;color: cornflowerblue;text-align: center">登录成功</h2>
<p style="text-align: center">欢迎您: 尊敬的 {$_SESSION['name']}</p>
<p style="text-align: center"><a href="logout.php" >退出</a></p>
WELCOME;


//导入页面公共底部
include 'inc/footer.php';

运行实例 »

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

4. 登录退出页loginout.php

实例

<?php
/**
 * 登录退出页面
 */
session_start();
if(!isset($_SESSION['id'])){
    require 'inc/function.php';
    redirect_user();
}else{
    session_destroy(); //服务器上的session信息消除
    setcookie('PHPSESSID','',time()-3600);
}
$page_title = '退出成功';
include 'inc/header.php';

echo <<< "LOGOUT"
<h2 style="font-size:1rem;color: cornflowerblue;text-align: center">退出成功</h2>
<p style="text-align:center"><a href="login.php">登录</a></p>
LOGOUT;


//导入页面公共底部
include 'inc/footer.php';

运行实例 »

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

三、cookie与session优缺点

作业.png