博客列表 >session和cookie简介以及实现登录与验证的案例--2018年17时35分

session和cookie简介以及实现登录与验证的案例--2018年17时35分

新竹网络_Terry的博客
新竹网络_Terry的博客原创
2018年09月03日 17:37:17652浏览

这一节课主要讲的是会话机制,cookie和session的简介以及怎么用cookie和session实现登录和验证的功能

代码


实例

<?php
$dbc=mysqli_connect('127.0.0.1','root','5201314','php');
if(mysqli_connect_error()){
    die('连接失败'.mysqli_connect_error());
}

运行实例 »

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

实例

<?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));
    }
    if(empty($errors)){
        $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='http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
    $url=trim($url,'/\\');
    $url.='/'.$page;

    header('Location:'.$url);
    exit();
}

运行实例 »

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

实例

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">

    <title>Document</title>
</head>
<body>
<h2>公共头部</h2>

运行实例 »

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

实例

<h2>公共底部</h2>
</body>
</html>

运行实例 »

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


实例

<?php
include 'public/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 'public/footer.php';
?>

运行实例 »

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

预览图

%AUUEYHZDZKU8T04L6BT$4H.png

实例

<?php
include 'public/header.php';
?>
<h2>用户登录</h2>
<form action="logincheck.php" method="post">
    <p>
    <label for="email">邮箱:</label>
    <input type="email" name="email" id="email" value="">
    </p>
    <p>
    <label for="password">密码:</label>
    <input type="password" name="password" id="password" value="">
    </p>
    <p>
        <button type="submit" name="submit" id="submit">登录</button>
    </p>
</form>
<?php
include 'public/footer.php';
?>

运行实例 »

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

预览图

D06AOIOBEE(5WRRWKR5~L$X.png


实例

<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
    require 'public/connect.php';
    require 'public/function.php';
    list($check,$data)=check_login($dbc,$_POST['email'],$_POST['password']);
    if($check){
        setcookie('user_id',$data['user_id']);
        setcookie('user_name',$data['user_name']);
        redirect_user('logined.php');
    }else{
        $errors=$data;
    }

}

运行实例 »

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


实例

<?php
if(!isset($_COOKIE['user_id'])){
    require 'public/function.php';
    redirect_user();
}
include 'public/header.php';
echo <<< "WELCOME"
<h2>登录成功</h2>
<p>欢迎您:亲爱的{$_COOKIE['user_name']}</p>
<p><a href="logout.php">退出</a></p>
WELCOME;
include 'public/footer.php';

运行实例 »

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

预览图

 G790A_3072XSO1)M)V)O07R.png

实例

<?php
if (!isset($_COOKIE['user_id'])){
    require 'public/function.php';
    redirect_user();
}else{
    setcookie('user_id','',time()-3600);
    setcookie('user_name','',time()-3600);
}

echo <<<"WELCOME"
<h2>退出成功</h2>
<p><a href="login.php">登录</a></p>
WELCOME;

include 'public/footer.php';

运行实例 »

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

)Y~B}B%($G[YZM8CH1G~3ZK.png 


session代码


实例

<?php
$dbc=mysqli_connect('127.0.0.1','root','5201314','php');
if(mysqli_connect_error()){
    die('连接失败'.mysqli_connect_error());
}

运行实例 »

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

实例

<?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));
    }
    if(empty($errors)){
        $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='http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
    $url=trim($url,'/\\');
    $url.='/'.$page;

    header('Location:'.$url);
    exit();
}

运行实例 »

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

实例

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">

    <title>Document</title>
</head>
<body>
<h2>公共头部</h2>

运行实例 »

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

实例

<h2>公共底部</h2>
</body>
</html>

运行实例 »

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

实例

<?php
//启动会话
session_start();
//导入页面的公共头部
include 'public/header.php';

echo '<h2>首页</h2>';
//判断用户是否登录?
if(isset($_SESSION['id'])&&basename($_SERVER['PHP_SELF']) !='logout.php'){
    echo '<a href="logout.php">退出</a>';
}else{
    echo '<a href="login.php">登录</a>';
}


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

运行实例 »

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

预览图

%AUUEYHZDZKU8T04L6BT$4H.png


实例

<?php
include 'public/header.php';
?>
<h2>用户登录</h2>
<form action="logincheck.php" method="post">
    <p>
    <label for="email">邮箱:</label>
    <input type="email" name="email" id="email" value="">
    </p>
    <p>
    <label for="password">密码:</label>
    <input type="password" name="password" id="password" value="">
    </p>
    <p>
        <button type="submit" name="submit" id="submit">登录</button>
    </p>
</form>
<?php
include 'public/footer.php';
?>

运行实例 »

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

预览图

 D06AOIOBEE(5WRRWKR5~L$X.png

实例

<?php
//启动会话
session_start();
if($_SERVER['REQUEST_METHOD']=='POST'){
    //加载函数库
    require 'public/connect.php';
    //连接数据库
    require 'public/function.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('logined.php');
    }else{
        $errors=$data;
    }
    //关闭
    mysqli_close($dbc);
}

运行实例 »

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

实例

<?php
//启动会话
session_start();
//判断用户是否登录?
if(!isset($_SESSION['user_id'])){
    require 'public/function.php';
    redirect_user();
}
//导入页面的公共头部
include 'public/header.php';
echo <<< "WELCOME"
<h2>登录成功</h2>
<p>欢迎您:亲爱的{$_SESSION['user_name']}</p>
<p><a href="logout.php">退出</a></p>
WELCOME;
//导入页面的公共底部
include 'public/footer.php';

运行实例 »

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

预览图 

G790A_3072XSO1)M)V)O07R.png


实例

<?php
session_start();
//判断用户是否登录?
if (!isset($_SESSION['user_id'])){
    require 'public/function.php';
    redirect_user();
}else{
    session_destroy();
    setcookie('PHPSESSID','',time()-3600);
}

echo <<<"WELCOME"
<h2>退出成功</h2>
<p><a href="login.php">登录</a></p>
WELCOME;
//导入页面的公共底部
include 'public/footer.php';

运行实例 »

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

预览图

)Y~B}B%($G[YZM8CH1G~3ZK.png


手写

IET9I4]~S]7}A0UX}S0R%ZJ.png

通过手写能够深刻了解cookie与session会话机制的优缺点,cookie存储在客 户端,且占用很少的资源,session用新的机制保持与客 户端的同步,不依赖于客 户端设置,cookie为浏览器所内置,使用方便,与cookie相比,session是存储在服务器端的信息,因此显得更为安全。

总结

1、设置cookiesetcookie(),查看cookie: 超全局系统变量[数组]: $_COOKIE,删除cookie,setcookie('','',time()-3600);

2、开启会话,在浏览上创建一个基于cookie的session_id,session_start();创建sessoin,$_SESSION[''] = '';删除服务器上的sessoin,session_destroy();

3、cookie存储在客 户端,且占用很少的资源,cookie为浏览器所内置,使用方便,cookie不是可执行文件,所以不会以任何方式执行,因此也不会带来病 毒或攻击用户的系统;但是要求用户浏览器必须支持并设置为启用cookie

4、session用新的机制保持与客 户端的同步,不依赖于客 户端设置;与cookie相比,session是存储在服务器端的信息,因此显得更为安全,但是session会占用服务器资源,加大服务器端的负载

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