如何在登录注册场景下无include/SQL/session实现PHP文件间传数据
无SQL、Session、Include的登录注册表单实现方案
因为不能使用数据库、Session和Include,我们可以将注册的用户信息存储到本地文本文件中,登录时读取文件内容进行校验。以下是具体实现:
一、修正注册流程代码
首先修复原代码的语法问题,并调整提交方式为更安全的POST:
注册页面(index.html)
<!doctype html> <html> <head> <meta charset="utf-8"> <title>Gleacc</title> <link rel="stylesheet" href="styles.css"> </head> <body> <h1>Gleacc GG</h1> <br> <form action="data/signedup.php" method="post"> <label for="usn"> <input placeholder="Username" name="usn" required> </label> <br> <label for="psw"> <input placeholder="Password" name="psw" required> </label> <br> <input type="submit" value="注册"> </form> <script src="scripts.js"></script> </body> </html>
signedup.php(注册处理)
将用户信息写入本地文本文件,并输出登录表单:
<?php $usn = $_POST['usn']; $psw = $_POST['psw']; // 存储用户信息的文件,确保data目录有写入权限 $userFile = '../users.txt'; // 以"用户名:密码"格式追加写入文件,加锁避免并发问题 file_put_contents($userFile, "$usn:$psw\n", FILE_APPEND | LOCK_EX); // 输出登录表单 echo '<form action="data/logined.php" method="post"> <input placeholder="Username" name="usn" required><br> <input placeholder="Password" name="psw" required><br> <input type="submit" value="登录"> </form>'; ?>
二、登录处理代码(logined.php)
读取存储的用户信息,校验登录凭证:
<?php $loginUsn = $_POST['usn']; $loginPsw = $_POST['psw']; $userFile = '../users.txt'; // 读取所有用户信息,忽略空行和换行符 $users = file($userFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $loginSuccess = false; foreach ($users as $user) { list($storedUsn, $storedPsw) = explode(':', $user); if ($storedUsn === $loginUsn && $storedPsw === $loginPsw) { $loginSuccess = true; break; } } if ($loginSuccess) { echo '登录成功!'; } else { echo '用户名或密码错误,请重试。<br><a href="../index.html">返回登录</a>'; } ?>
关键注意事项
- 安全优化:示例中密码为明文存储,生产环境必须使用
password_hash()加密存储,登录时用password_verify()校验。 - 文件权限:确保
users.txt所在目录有PHP的写入权限,否则无法存储用户信息。 - 重复注册校验:可在
signedup.php中先读取文件,检查用户名是否已存在,避免重复注册。
内容的提问来源于stack exchange,提问作者GGG
相关产品推荐
相关产品推荐

