Php 无需数据库即可轻松登录脚本
如何创建一个不需要数据库的简单登录脚本。我希望它是安全的 好的,这个脚本怎么样,我只是用我的php知识编写的Php 无需数据库即可轻松登录脚本,php,login,Php,Login,如何创建一个不需要数据库的简单登录脚本。我希望它是安全的 好的,这个脚本怎么样,我只是用我的php知识编写的 <?php // Start session session_start(); // Username and password $ID = "admin"; $pass = "123456"; if (isset($_POST["ID"]) && isset($_POST["pass"])) { if ($_POST["ID"] === $an
<?php
// Start session
session_start();
// Username and password
$ID = "admin";
$pass = "123456";
if (isset($_POST["ID"]) && isset($_POST["pass"])) {
if ($_POST["ID"] === $anvandarID && $_POST["pass"] === $pass) {
/
$_SESSION["inloggedin"] = true;
header("Location: safe_site.php");
exit;
}
// Wrong login - message
else {$wrong = "Bad ID and password, the system could not log you in";}
}
?>
如果您没有数据库,则必须在代码中硬编码登录详细信息,或从磁盘上的平面文件中读取。将用户名和密码哈希值以数组形式保存在php文件中,而不是数据库中 当您需要对用户进行身份验证时,请计算其凭据的哈希值,然后将其与数组中的哈希值进行比较
如果使用安全散列函数(参见PHP文档),它应该是相当安全的(您可以考虑使用盐散列),并且还可以对表单本身添加一些保护。
< P>如果您没有数据库,您的用户登录数据的永久记录将存储在何处?当然,当用户登录时,站点工作所需的最小用户信息可以存储在会话或cookie中。但在他们注销后,又会怎样?会话消失,cookie可能被黑客攻击 因此,您的用户会返回到您的站点。他试图登录。您的站点将他的登录信息与哪些值得信赖的东西进行比较?或者有两个很好的选择基本上,你的用户登录到他们已经是成员的其他网站(Facebook或Google),然后你从该网站得到确认,告诉你该用户是可信的——启动一个会话,他们就登录了。不需要数据库(除非您想将更多数据关联到他们的帐户)。这不是一个理想的解决方案,但这里有一个简单的示例,演示了如何在PHP代码中存储登录信息:
<?php
session_start();
$userinfo = array(
'user1'=>'password1',
'user2'=>'password2'
);
if(isset($_GET['logout'])) {
$_SESSION['username'] = '';
header('Location: ' . $_SERVER['PHP_SELF']);
}
if(isset($_POST['username'])) {
if($userinfo[$_POST['username']] == $_POST['password']) {
$_SESSION['username'] = $_POST['username'];
}else {
//Invalid Login
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Login</title>
</head>
<body>
<?php if($_SESSION['username']): ?>
<p>You are logged in as <?=$_SESSION['username']?></p>
<p><a href="?logout=1">Logout</a></p>
<?php endif; ?>
<form name="login" action="" method="post">
Username: <input type="text" name="username" value="" /><br />
Password: <input type="password" name="password" value="" /><br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
登录
您是以用户身份登录的
用户名:
密码:
您可以使用HTTP基本身份验证和身份验证在Web服务器级别执行访问控制。这方面存在许多问题:
除非您正在构建一个供内部用户使用的站点,否则我不会真正推荐它。没有理由不使用数据库来实现登录,如果您的托管公司没有为您提供足够的数据库,您至少可以下载并安装SQLite。我会使用这样的两个文件设置: index.php
<?php
session_start();
define('DS', TRUE); // used to protect includes
define('USERNAME', $_SESSION['username']);
define('SELF', $_SERVER['PHP_SELF'] );
if (!USERNAME or isset($_GET['logout']))
include('login.php');
// everything below will show after correct login
?>
login.php
<?php defined('DS') OR die('No direct access allowed.');
$users = array(
"user" => "userpass"
);
if(isset($_GET['logout'])) {
$_SESSION['username'] = '';
header('Location: ' . $_SERVER['PHP_SELF']);
}
if(isset($_POST['username'])) {
if($users[$_POST['username']] !== NULL && $users[$_POST['username']] == $_POST['password']) {
$_SESSION['username'] = $_POST['username'];
header('Location: ' . $_SERVER['PHP_SELF']);
}else {
//invalid login
echo "<p>error logging in</p>";
}
}
echo '<form method="post" action="'.SELF.'">
<h2>Login</h2>
<p><label for="username">Username</label> <input type="text" id="username" name="username" value="" /></p>
<p><label for="password">Password</label> <input type="password" id="password" name="password" value="" /></p>
<p><input type="submit" name="submit" value="Login" class="button"/></p>
</form>';
exit;
?>
***未链接到数据库或外部文件的登录脚本。适用于全局密码- 放置在登录表单页面上-将其放置在登录页面的顶部-高于所有其他内容***
<?php
if(isset($_POST['Login'])){
if(strtolower($_POST["username"])=="ChangeThis" && $_POST["password"]=="ChangeThis"){
session_start();
$_SESSION['logged_in'] = TRUE;
header("Location: ./YourPageAfterLogin.php");
}else {
$error= "Login failed !";
}
}
//print"version3<br>";
//print"username=".$_POST["username"]."<br>";
//print"password=".$_POST["username"];
?>
*登录以下页面-将其放置在需要登录保护的每个页面的顶部。这将检查会话,以及用户名和密码是否有*
<?php
session_start();
if(!isset($_SESSION['logged_in']) OR $_SESSION['logged_in'] != TRUE){
header("Location: ./YourLoginPage.php");
}
?>
试试这个:
<?php
session_start();
$userinfo = array(
'user'=>'5d41402abc4b2a76b9719d911017c592', //Hello...
);
if(isset($_GET['logout'])) {
$_SESSION['username'] = '';
header('Location: ' . $_SERVER['PHP_SELF']);
}
if(isset($_POST['username'])) {
if($userinfo[$_POST['username']] == md5($_POST['password'])) {
$_SESSION['username'] = $_POST['username'];
}else {
header("location:403.html"); //replace with 403
}
}
?>
<?php if($_SESSION['username']): ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Logged In</title>
</head>
<body>
<p>You're logged in.</p>
<a href="logout.php">LOG OUT</a>
</body>
</html>
<?php else: ?>
<html>
<head>
<title>Log In</title>
</head>
<body>
<h1>Login needed</h1>
<form name="login" action="" method="post">
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td colspan="3"><strong>System Login</strong></td>
</tr>
<tr>
<td width="78">Username:</td>
<td width="294"><input name="username" type="text" id="username"></td>
</tr>
<tr>
<td>Password:</td>
<td><input name="password" type="password" id="password"></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="Submit" value="Login"></td>
</tr>
</table>
</form>
</body>
</html>
<?php endif; ?>
登录
你已经登录了
登录
需要登录
系统登录
用户名:
密码:
您将需要注销,类似于以下内容(logout.php):
//除非缺少上面的标题,否则不需要下面的标题。在这种情况下,请在此处输入已注销的文本。
无标题文件
我不能将登录详细信息存储在变量中吗?你可以,这就是他所说的“在代码中硬编码登录详细信息”的意思。你如何创建一个不需要ASP数据库的简单登录脚本?现在,我在上面的第一篇文章中添加的示例怎么样。@Elijah:你想让所有用户使用相同的用户名/密码吗?不,不是很简单,但现在我看到马克贴了一个又快又脏的解决方案,我现在就用它!谢谢大家的帮助,我感谢你们的时间。@Elijah:如果您只需要一小部分用户,那么提供的解决方案标记就可以了。该解决方案的扩展性不太好。谢谢!这可能比我的好。以纯文本形式存储密码通常被认为是不安全的。任何人看到这些密码的唯一方法是如果web服务器停止解析PHP。然后,您将面临一个更大的问题:)他只是在寻找快速简单的方法。当应用程序中存在其他漏洞时,服务器不必停止解析PHP(始终至少存在一个:),攻击者将能够在没有任何人知道的情况下读取其他人的密码,正如您所说,这是一个大问题。很少的sha1函数调用不会杀死任何人,而且会更安全。弗兰克,回答得很好-但是问题已经回答了,答案被接受了。如果您想解释为什么您的答案不同于或优于公认的答案,这可能会有所帮助。此解决方案与原始问题中的解决方案不一样吗?URL现在显示“对不起,您访问的链接可能已断开,或者页面可能已被删除。”-应该删除它。
<?php
session_start();
$userinfo = array(
'user'=>'5d41402abc4b2a76b9719d911017c592', //Hello...
);
if(isset($_GET['logout'])) {
$_SESSION['username'] = '';
header('Location: ' . $_SERVER['PHP_SELF']);
}
if(isset($_POST['username'])) {
if($userinfo[$_POST['username']] == md5($_POST['password'])) {
$_SESSION['username'] = $_POST['username'];
}else {
header("location:403.html"); //replace with 403
}
}
?>
<?php if($_SESSION['username']): ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Logged In</title>
</head>
<body>
<p>You're logged in.</p>
<a href="logout.php">LOG OUT</a>
</body>
</html>
<?php else: ?>
<html>
<head>
<title>Log In</title>
</head>
<body>
<h1>Login needed</h1>
<form name="login" action="" method="post">
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td colspan="3"><strong>System Login</strong></td>
</tr>
<tr>
<td width="78">Username:</td>
<td width="294"><input name="username" type="text" id="username"></td>
</tr>
<tr>
<td>Password:</td>
<td><input name="password" type="password" id="password"></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="Submit" value="Login"></td>
</tr>
</table>
</form>
</body>
</html>
<?php endif; ?>
<?php
session_start();
session_destroy();
header("location:index.html"); //Replace with Logged Out page. Remove if you want to use HTML in same file.
?>
// Below is not needed, unless header above is missing. In that case, put logged out text here.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<!-- Put logged out message here -->
</body>
</html>