我想要创建一个简单的应用程序,使用基于文件的身份验证来测试登录和退出,但是我已经遇到了一些我无法解决的问题。
以下是用于测试我的应用程序的文本文件的内容,名为 filetest_02.txt
david, codeslave
chris, bigboss
我也使用PHP脚本来进行测试 以下是 login.php
的内容 <?php
$error = '';
if ( isset($_POST['login']) ) {
session_start();
$username = trim( $_POST['username'] );
$password = trim( $_POST['pwd'] );
// location of usernames and passwords
$userlist = 'C:/private/filetest_02.txt';
// location to redirect on success
$redirect = 'http://localhost/php/powers/solutions/ch09/menu.php';
require_once './includes/authenticate.inc.php';
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Login</title>
</head>
<body>
<?php if ( $error ) : ?>
<p><?php echo $error; ?></p>
<?php endif; ?>
<form id="form1" method="post" action="">
<p>
<label for="username">Username:</label>
<input type="text" name="username" id="username">
</p>
<p>
<label for="pwd">Password:</label>
<input type="password" name="pwd" id="pwd">
</p>
<p>
<input name="login" type="submit" id="login" value="Log in">
</p>
</form>
</body>
</html>
以下是 authenticate.inc.php
的内容<?php
if ( !file_exists($userlist) || !is_readable($userlist) ) {
$error = 'Login facility unavailable. Please try later.';
} else {
// read the file into an array called $users
$users = file( $userlist );
// loop through the array to process each line
for ( $i = 0; $i < count($users); $i++ ) {
// separate each element and store in a temporary array
$tmp = explode( ', ', $users[$i] );
var_dump($tmp);
$name = trim($tmp[0]);
$pwd = trim($tmp[1]);
var_dump( $name, $pwd );
var_dump( $_POST );
// check for a matching record
if ( $name == $username && $pwd == $password ) {
$_SESSION['authenticated'] = 'Jethro Tull';
session_regenerate_id();
break;
}
}
// if the session variable has been set, redirect
if ( isset($_SESSION['authenticated']) ) {
/* header( "Location: $redirect" );
exit; */
} else {
$error = 'Invalid username or password.';
}
}
麻烦的是当我点击 login.php 上的登录按钮时,我得到以下输出
为什么var_dump输出显示字符串&#39; david&#39;的长度?修剪后即使等于8甚至8?可能导致这一切的原因是什么? 谢谢。
答案 0 :(得分:-1)
var_dump可能会向您显示带空格的david的初始化,但您可以看到它后来识别出它的剪切。这会在您的代码中执行任何不需要的操作吗?
此外,如果这是针对实际的网站,而您只是不玩游戏,我不会将密码存储在您的文件中,而不会对其进行腌制和散列。
另外,请参阅PHP手册:
string(32)“这些是几句话:) ......” string(16)“示例字符串 “ string(11)“Hello World”
string(28)“这些是几句话:) ......” string(24)“这些是几个字:)” string(5)“o Wor” string(9)“ello Worl” string(14)“Example string”
var_dump显示了初始化和之后的修剪。