PHP基础:利用cookie与session实现用户的注册登陆与验证
1.用户的注册、登陆与验证
1.1实现思路
-当用户打开首页时,判断用户是否已登陆过,如未登陆过,跳转到登陆页面;
-用户输入登陆信息,点击登陆,连接数据库进行验证用户输入的账号与密码是否正确,正确则跳转到首页,不正确则返回登陆页面;
-如登陆成功,则利用cookie或session记录用户登陆状态
-如用户未注册,则需点击注册按钮进行注册,注册成功后跳转到登陆页面;
1.2实现代码
-login.php 登陆页面
<?php
// 1.cookie方式登陆验证
// 判断是否已登录
if (isset($_COOKIE['user']))
exit('<script>alert("请不要重复登录");location.href="index.php";</script>');
// 2.session方式登陆验证
// 判断是否已登录
// 先开启会话,再判断
session_start();
if (isset($_SESSION['user']))
exit('<script>alert("请不要重复登录");location.href="index.php";</script>');
?>
html代码略过...
-index.php 首页
<?php
// 1.cookie方式登陆验证
if (isset($_COOKIE['user'])) $user = unserialize($_COOKIE['user']);
// 2.session方式登陆验证
// 先开启会话,再判断
session_start();
if (isset($_SESSION['user'])) $user = unserialize($_SESSION['user']);
?>
html代码略过...
-server.php 注册及登陆验证页面
<?php
// 查询用户表中的数据
$pdo = new PDO('mysql:host=localhost;dbname=study', 'root', 'root');
$stmt = $pdo->prepare('SELECT * FROM `users`');
$stmt->execute();
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 处理用户登录与注册
$action = $_GET['action'];
switch ( strtolower($action)) {
// 登录
case 'login':
// 判断请求是否合法
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 获取需要验证的数据
$username = $_POST['username'];
$password = sha1($_POST['password']);
$results = array_filter($users, function($user) use ($username, $password) {
return $user['username'] === $username && $user['password'] === $password;
});
if (count($results) === 1) {
// 1.cookie方式
setcookie('user', serialize(array_pop($results)));
// 2.session方式
$_SESSION['user']= serialize(array_pop($results));
exit('<script>alert("验证通过");location.href="index.php"</script>');
} else {
exit('<script>alert("账号或密码错误,或者还没有帐号");location.href="login.php";</script>');
}
} else {
die('请求类型错误');
}
break;
// 退出
case 'logout':
// 1.cookie方式
if (isset($_COOKIE['user'])) {
setcookie('user', null , time()-3600);
exit('<script>alert("退出成功");location.assign("login.php")</script>');
}
// 2.session方式
if (isset($_SESSION['user'])) {
session_destroy();
exit('<script>alert("退出成功");location.assign("login.php")</script>');
}
break;
// 注册
case 'reg':
// 1. 获取到所有新用户数据
$username = $_POST['username'];
$password = sha1($_POST['p1']);
$regtime = time();
// 2. 将新用户插入到表中
$sql = "INSERT `users` SET `username`='{$username}', `password`='{$password}', `regtime`={$regtime}";
$stmt = $pdo->prepare($sql);
$stmt->execute();
if ($stmt->rowCount() === 1) exit('<script>alert("注册成功");location.assign("login.php")</script>');
else exit('<script>alert("注册失败");location.assign("login.php")</script>');
break;
// 未定义
default:
exit('未定义操作');
}
1.3运行效果
-cookie登陆验证
-cookie重复登陆验证
-session登陆验证
-session重复登陆验证