博客列表 >利用session简单的会话控制机制

利用session简单的会话控制机制

夜澜风的博客
夜澜风的博客原创
2019年04月22日 00:10:471141浏览

实例

先登录

<?php

session_start();

if(isset($_SESSION['username']) && $_SESSION['username']==='admin'){
    echo '<script>alert("已经登录请勿重新登录");location.assign("admin.php");</script>';
}
?>
<!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>用户登录</title>
</head>
<body>
<h3>用户登录</h3>
<form action="check.php" method="post" onsubmit="return isEmpty()">
    <p>
        <label for="email">邮箱</label>
        <input type="email" name="email" id="email">

    </p>
    <p>
        <label for="password">密码</label>
        <input type="password" name="password" id="password">
    </p>
    <button>提交</button>

</form>

<script>
    function isEmpty() {
        var email= document.getElementById('email').value;
        var password = document.getElementById('password').value;
        if (email.length===0 || password.length===0){
            alert('邮箱不能为空');
            return false;
        }
    }

</script>
</body>
</html>

运行实例 »

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

再验证

实例

<?php
session_start();
//防止重复登录检查
if(isset($_SESSION['username']) && $_SESSION['username']==='admin'){
    echo '<script>alert("已经登录请勿重新登录");location.href="admin.php";</script>';
    die;
}

// 连接数据库
require  __DIR__ .'/connect.php';
//print_r ('<pre>');
//print_r($_POST);

$email = htmlentities(trim($_POST['email'])); //htmlentities()进行转移 trim()过滤空格
$password = sha1($_POST['password']);

// 到用户表user中进行验证
$sql = 'SELECT * FROM `user` WHERE `email` = :email  AND `password` = :password  LIMIT 1';
$stmt = $pdo->prepare($sql);
//条理写法
$stmt->bindParam( 'email', $email, PDO::PARAM_STR);
$stmt->bindParam( 'password', $password, PDO::PARAM_STR );
$stmt->execute();

//简约写法:
//$stmt->execute(['email'=>$email,'password'=>$password]);

// fetch(): 成功返回数组,失败返回false
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if(false==$user){
    // 登录失败
    echo ' <script>alert("登录失败请检查");history.back();</script>';
    die;// 终止当前脚本
}
// 登录成功,将用户信息写入cookie
//setcookie('username',$user['username']);
$_SESSION['username'] = $user['username'];
echo '<script>alert("登录成功");location.assign("admin.php");</script>';  //这里的assign()和location.href()意思一样就是写法不同

运行实例 »

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

通过后进入后台

实例

<?php
//判断用户是否已经登录
session_start();
if(isset($_SESSION['username']) && $_SESSION['username']==='admin'):  //这里 “ :”是三目运算符 表达式1?表达式2:表达式3 如果表达式1成了,结果为表达式2否则为表达式3
// 实际也可以也可以这样理解 ":"等于 "{}"
//其实也就是<?php else { ?>
<!--if(false) :-->
<!--echo 'if';-->
<!--else :-->
<!--echo 'else';-->
<!--endif;-->
<!--等价于:-->
<!--if(false){-->
<!--echo 'if';-->
<!--}else {-->
<!--echo 'else';-->
<!--}-->
<!--html 和php混用的时候,需要再其中插入php时,就需要--><?php //?><!--包着。如:-->
<!--<body>-->
<?php //if(true){ ?>
<!--<div>if</div>-->
<?php //}else { ?>
<!--<div>else</div>-->
<?php //} ?>
?>

<!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>会员中心</title>
</head>
<body>
<h2>网站后台</h2>
<p>欢迎:
<?php echo $_SESSION['username']?>
</p>

<p>
    <a href="logout.php">退出</a>
</p>
</body>
</html>

<?php else :?>
    echo '<script>alert("请先登录");location.href="login.php";</script>';
<?php endif;?>

运行实例 »

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

退出

实例

<?php
// 必须已经登录才允许进行退出操作
session_start();
if(isset($_SESSION['username']) && $_SESSION['username']==='admin'){

//    setcookie('username', null , time()-3600);
    session_destroy();
    echo '<script>alert("退出成功");location.href="login.php";</script>';
}

运行实例 »

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


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