SESSION 登录实战
index首页文件
<?php
// 开启session会话
session_start();
// 判断用户是否登录,如果没有,则跳转到相应的页面
// var_dump($_SESSION['name']);
// die;
if (isset($_SESSION['name'])) {
echo '用户: ' . $_SESSION['name'] . '已登录<br>';
echo '<a href="logout.php">退出</a>';
} else {
// 2. 未登录,就跳转到登录页面
echo '<a href="login.php">请登录</a>';
}
login登录页
<?php
// 防止用户重复登录
if (isset($_SESSION['name'])) {
session_start();
# code...
echo '<script>alert("不要重复登录");location.assign("index.php");</script>';
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-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=" phone">手机:</label>
<input type="phone" name="phone" id="phone">
</p>
<p>
<label for="password">密码:</label>
<input type="password" name="password" id="password">
</p>
<p>
<button>提交</button>
</p>
</form>
<script>
function isEmpty() {
var phone = document.getElementById('phone').value;
var password = document.getElementById('password').value;
if (phone.length === 0 || password.length === 0) {
alert('手机和密码不能为空');
return false;
}
}
</script>
</body>
</html>
check登录验证
<?php
require 'connect.php';
session_start();
// 1.判断用户的请求类型是否正确?
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 获取表单提交的数据
$user_name = $_POST['phone'];
$user_alias = md5($_POST['password']);
// var_dump($user_alias);
// die;
// 3. 用用户表user.dbf进行验证
$sql = 'SELECT * FROM `user` WHERE `phone` = :phone AND `pwd` = :password LIMIT 1';
$stmt = $pdo->prepare($sql);
$stmt->execute(['phone' => $user_name, 'password' => $user_alias]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
// var_dump($user['name']);
// die;
// 4. 判断验证的结果
if (false === $user) {
// 验证失败,返回上一下页面
echo '<script>alert("验证失败");history.back();</script>';
die;
}
// 验证成功,将用户的信息写到session
$_SESSION['name'] = $user['name'];
// var_dump($_SESSION['name']);
// die;
echo '<script>alert("登录成功");location.assign("index.php");</script>';
exit;
} else {
echo '请求类型错误';
}
logout退出
<?php
// 必须在用户已经登录的情况下再退出
session_start();
if (isset($_SESSION['name'])) {
session_destroy();
echo '<script>alert("退出成功");location.assign("index.php");</script>';
} else {
// 要求用户先登录
echo '<script>alert("请先登录");location.assign("login.php");</script>';
}
效果图
数据库:
登录前
用户登录页
验证页
登录成功页
总结
cookie与session提供两个页面通信,他们在在多个页面存储一些公共变量,每个页面都能访问这些
变量,实现多个页面的通信作用。
cookie的数据存于客户端,session的数据一般存于服务端。