PHP作业,session实现7天免登录(含详细代码与注释、运行截图)

文章描述了一个使用PHP构建的用户登录系统,包括登录失败提示、登录成功后保存SESSION、用户中心页面、退出登录功能。拓展题讨论了七天免登录的实现,通过存储加密token在服务器和客户端cookie中,实现自动登录并强调了安全性考虑。
摘要由CSDN通过智能技术生成

1.设计并实现“用户登录”页面,要求:

(1)当用户登录失败时,给出相应提示。

(2)当用户登录成功后,把用户姓名保存在SESSION中,并跳转至“用户中心”页面,在“用户中心”页面显示欢迎该用户的欢迎语(“用户中心”页面不能在未登录状态直接访问)。

(3)在“用户中心”页面设置“退出”链接,当用户单击“退出”链接时,清除SESSION中存储的用户信息。

拓展题:

(1)在上述要求基础上,实现7天免登录功能。

sql文件:

CREATE TABLE `userinfo` (
  `userID` varchar(15) NOT NULL COMMENT '账号',
  `userName` varchar(30) DEFAULT '' COMMENT '真实姓名',
  `userPwd` varchar(32) DEFAULT NULL COMMENT '密码',
  `salt` varchar(4) DEFAULT NULL COMMENT '盐',
  `regDate` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间',
  PRIMARY KEY (`userID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

select userPwd,userName,salt from userInfo where userName = "张三";

insert into userinfo value("1003","二狗","123","0812","2020-01-04 15:21:46");

<?php
//登录界面
//创建一个session会话
session_start();
$link = mysqli_connect('localhost','root','zwq123','zuoye');
//如果 已经登录的话 则直接跳转到用户界面 (免登录)
if(isset($_SESSION['userName'])){
    header("Location:admin.php");
    exit();
}
//获取登录界面的 用户名与密码
if($_POST){
    $Name = $_POST["userName"];
    $pwd = $_POST["userPwd"];

    $sql = "select userPwd,userName,salt from userInfo where userName = '$Name'";
    $res = mysqli_query($link,$sql);
    $row = mysqli_fetch_assoc($res);
    //不需要用循环遍历,因为每一个人都是独一无二的,所以用sql获取后直接if判断
    if($row["userName"] == $Name){
        //把 name值放到 session中
        $_SESSION['userName'] = $Name;
        //如果勾选七天免登录的话 设置cookie,用于保存获取的name
        if(isset($_POST['remember'])){
            setcookie('userName',$Name,time()+60*60*24*7);
        }
        //这一段代码用于判断当前用户是否已经登录,如果没有登录(session中没有name值)
        //但在cookie中存储了name,则将name存储到session中,实现自动登录
        if(!isset($_SESSION['userName']) && isset($_COOKIE['userName'])){
            $_SESSION['userName'] = $_COOKIE['userName'];
        }
        //登录成功,跳转到用户界面
        header('Location:admin.php');
        exit();
    }else{
        echo "未查询到该用户";
    }
}
mysqli_stmt_close($stmt);
mysqli_close($link);

?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>用户登录</title>
</head>
<body>
    <h2>用户登录</h2>
    <form action="setSession.php" method="post">
        用户名:<input type="text" placeholder="请输入用户名" name="userName" required id="userName">
        密  码:<input type="password" placeholder="请输入密码" name="userPwd" required id="userPwd">
        <label><input type="checkbox" name="remember">7天免登录</label><br>
        <button type="submit" name="submit">&nbsp;&nbsp;</button>
    </form>
</body>
</html>

在这里插入图片描述

<?php
//用户界面
session_start();
//如果session中 存在该name值 则表示登录成功,登录失败则跳转到登录界面
if(isset($_SESSION['userName'])){
    $name = $_SESSION['userName'];
    echo "登录成功,".$name;
}else{
    die("<script>alert('登录失效');location.href='setSession.php</script>'");
}
echo '<br><a href="logout.php">退出登录</a>'

?>

在这里插入图片描述

<?php
//登出后跳转到登录页面
session_start();
//登出,则删除session中的name值,且销毁session
unset($_SESSION['userName']);

session_destroy();

setcookie('userName','',time()-3600);
header('Location:setSession.php');
exit();
?>

在这里插入图片描述
如果不点击退出登录,直接进入登录页面的话,会免登录进入用户界面

注意

session与cookie实现七天免登录只是PHP课本中的一个简单实现例子,理解原理即可,但太过简单明显不安全
互联网某些网站使用到七天免登录则是从中进行了升级,提高了安全性

一般需要以下几个步骤:

1.用户登录时,服务端验证用户身份后生成一个加密的 token(该 token 可以是随机字符串或者是使用 JWT 等技术生成的 JSON Web Token),将该 token 存储在服务端的数据库或者缓存中,并将该 token 发送给客户端。

2.客户端接收到 token 后,将其存储在本地浏览器的 cookie 中,并设置该 cookie 的过期时间为七天后。

3.用户再次访问网站时,浏览器会将之前存储的 cookie 发送给服务端。服务端接收到 cookie 后,会对其进行解密并验证其合法性。如果验证通过,则自动登录。

4.服务端需要定期检查用户的登录状态,比如每次用户访问网站时都会检查其登录状态是否已过期。如果已过期,则需要重新验证用户的身份并生成新的 token。

需要注意的是,在实现“七天免登录”的过程中,需要注意安全性问题,例如加密算法的选择、token 的有效期限制等,以确保用户信息的安全。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值