博客列表 >0831作业:cookie和session浏览器和服务器的会话

0831作业:cookie和session浏览器和服务器的会话

Samoye
Samoye原创
2018年09月04日 11:45:49570浏览

作业1:cookie实现用户登录与验证

代码1:实现功能:登录页面,判断用户是否登录

实例

<?php

$page_title = '首页';
include 'inc/header.php';

echo '<h2>首页第一打开网站的界面</h2>';

if (isset($_COOKIE['id']) && basename($_SERVER['PHP_SELF']) != 'logout.php'){
    //判断用户已经登录,则显示退出按钮
    echo '<a href="logout.php">退出</a>';
}else{
    echo '<a href="login.php">登录</a>';
}








include 'inc/footer.php';

运行实例 »

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

代码2:实现功能:登录成功界面

实例

<?php
/**
登录成功跳转的页面
 */

//判断用户是否登录
if (!isset($_COOKIE['id'])){
    require 'inc/function.php';
    redirect_user();//未登录调整到默认连接:index
}

$page_title = '登录成功界面';

include 'inc/header.php';

echo <<< EOT
<h2>登录成功</h2>
<p>欢迎:{$_COOKIE['name']}</p> 
<p>
<a href="logout.php">退出</a>
</p>
EOT;

include 'inc/function.php';

运行实例 »

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

代码3:实现功能:验证登录信息

实例

<?php
//检测用户提交的类型
if ($_SERVER['REQUEST_METHOD'] == 'POST'){

    require 'inc/function.php';//导入验证函数
    require 'inc/connect.php';//导入数据库连接

    //check_login($dbc,'admin@php.cn','1234');

  //验证登录
    list($check,$data) = check_login($dbc,$_POST['email'],$_POST['password']);
    //list 绑定返回的信息,check是布尔值,$data 是个数组
    if ($check){
        setcookie('id',$data['id']);
        setcookie('name',$data['name']);
        //登录成功,跳转
        redirect_user('loggedin.php');
    }else{
        $errors = $data;
    }

    mysqli_close($dbc);
}




include 'login_page.php';

运行实例 »

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

代码4:实现功能:欢迎登录界面,获取用户输入的表单信息

实例

<?php
// 这是剥离的登录页面,为了更好的调用
$page_title='欢迎登陆';

include "inc/header.php";

//如果出错,输出错误信息
if (isset($errors) && !empty($errors)) {
    $errors_msg = '<p>';
    foreach ($errors as $msg) {
        $errors_msg .= $msg .'<br>'; //拼接错误信息。
    }
    echo $errors_msg .'</p>';
}


?>


    <h2>用户登录界面</h2>
    <form action="login.php" method="post">
        <p>
            <label for="email">邮箱:</label>
            <input type="email" name="email" id="email" value="
    <?php
            echo isset($_POST['email'])?$_POST['email']:'';
            //粘性表单;
            ?>
    ">
        </p>

        <p>
            <label for="password">密码:</label>
            <input type="password" name="password" id="password" value="<?php
            echo isset($_POST['password'])?$_POST['password']:'';
            ?>
    ">
        </p>

        <p>
            <button type="submit" name="submit" id="submit">登录</button>
        </p>
    </form>


<?php

include "inc/footer.php";



?>

运行实例 »

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

代码5:处理登出信息 的界面

实例

<?php
/**
实现功能:退出界面
 */

//判断用户是否登录
if (!isset($_COOKIE['id'])){
    require 'inc/function.php';
    redirect_user();//未登录调整到默认连接:index
} else{
    //已登录,删除cookie时间
    setcookie('id',time()-1200);
    setcookie('name',time()-1200);
}


$page_title = '已退出';

include 'inc/header.php';

echo <<< EOT
<h2>退出成功</h2>

<p>
<a href="login.php">登录</a>
</p>
EOT;

include 'inc/function.php';

运行实例 »

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

以下代码是包含的公共部分

代码6:实现数据的连接

实例

<?php
/**
用来连接数据库 利用的是mysqli_connect();方法
 */

$dbc = mysqli_connect('localhost','root','root','stu');

if (mysqli_connect_errno()){
    die('连接数据库出错了!'.mysqli_connect_error()); //打印出错信息;
}

运行实例 »

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

代码7:公共的HTML页面--导航条

实例

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>
        <?php
        echo isset($page_title) ? $page_title :'随便了';
        ?>
    </title>
</head>
<body>
<h1>头部导航栏</h1>

运行实例 »

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

代码8:公共的HTML页面--尾部

实例

<h1>底部版权栏</h1>

</body>
</html>

运行实例 »

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


代码9:公共函数:用户实现用户验证,获得结果集,及成功后跳转

实例

<?php
/**
公共函数部分
 */
// 用于验证的函数
function check_login($dbc, $email='',$password){

    //搞个数组,收集错误信息
    $errors = [];
    //邮箱不能为空
    if (empty($email)){
        //如果忘填写邮箱了,执行
        $errors[]= '请填写邮箱';

    }else{ //如果填写了邮箱,执行
        $e = mysqli_real_escape_string($dbc,trim($email)); //对特殊字符转义,取出多余空格,两边的
    }


    //登录密码不能为空
    if (empty($password)){
        //如果忘填写密码了,执行
        $errors[]= '请输入密码!';

    }else{ //如果填写了密码,执行
        $p = mysqli_real_escape_string($dbc,trim($password));
    }

    //拉取数据库数据,和post传入的参数对比是否有误

    if (empty($errors)) {
        //如果errors为空,则说明登录信息有了,执行验证
        //执行SQL语句获取数据库中的邮箱和密码进行对比
        $sql = "select `id`,`name` from `user` where `email`='$e' and `password` = '$p';";
        //die($sql);
        //用mysqli_query()查询sql语句

        $res = mysqli_query($dbc, $sql);

        //var_dump($res);die;
       // echo mysqli_num_rows($res);die;
        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 = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']); //拼接一个地址
    $url = rtrim($url,'/\\');
    $url .= '/'.$page; //拼接一个完整的URL地址 http://xxx.xxx.php
    header('location:'.$url); //跳转到指定位置:
    exit();
}

运行实例 »

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


作业3:cookie和session的优缺点

cookie为浏览器内置,方便使用,且占用资源小,一般一个cookie 4Kb;cookie 是不可执行文件,不会引起病*毒攻击
cookie在客*户端,减轻了服务端的压力,但是,cookie会被用户禁用,那么基于cookie的应用就失效了。

session 方式是用户在会话期间的私有信息存储在服务器上,使session中定义的变量和对象可以在页面共享
但又不能被其他程序访问,安全性较高。随着会话的增多,session占用服务器资源,而且,一旦服务器被攻破,可以拿到session中的用户信息,也是比较危险的。




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