Php 仅在登录时显示内容
你好,我有个问题。我已经用cookies设置了我的登录系统,它可以正常工作。但我想知道有没有一个更干净的版本可以做到这一点Php 仅在登录时显示内容,php,html,Php,Html,你好,我有个问题。我已经用cookies设置了我的登录系统,它可以正常工作。但我想知道有没有一个更干净的版本可以做到这一点 <? include('../config/db_config.php'); $username = $_COOKIE['user']; $password = $_COOKIE['pass']; $result = mysql_query("SELECT * FROM users WHERE isadmin = 1"); while($row = mysql_
<?
include('../config/db_config.php');
$username = $_COOKIE['user'];
$password = $_COOKIE['pass'];
$result = mysql_query("SELECT * FROM users WHERE isadmin = 1");
while($row = mysql_fetch_array($result))
{
if($username == $row['username'] && $password == $row['password'])
{
//User entered correct username and password
echo("ALLOW");
}
else
{
//User entered incorrect username and password
echo("DENY");
}
}
?>
你看,我想所有我的内容显示,只有当我作为管理员登录。那么,现在唯一的方法是回显我的HTML/PHP/Javascript,而不是回显ALLOW,因为如果我只在其中包含(“somepage.PHP”),该页面仍然可以在不登录的情况下使用,即使我在那里做同样的检查,我仍然会呼出所有信息。我建议你只做一次这样的操作,当用户第一次访问页面时,然后在其余时间设置$u会话['is_admin']或其他什么,这样,您就不必在每个页面上进行额外的db调用。您可以在登录页面(或检查登录的任何页面)上设置一个会话变量,该变量存储用户是否登录,并在页面间保持不变。然后,您可以简单地将管理员html包装在if语句中,如下所示:
<?php
if ($_SESSION['isAdmin'] == true) {
?>
<p>My admin html</p>
<?php
} else {
?>
<p>My non-admin html</p>
<?php
}
?>
我的管理员html
我的非管理员html
要在会话中保存信息,只需将其添加到您有echo(“允许”)的部分即可代码>:
$\u会话['isAdmin']=true
您还需要添加session_start()代码>到脚本顶部。
- 为什么要加载每个用户,然后比较用户名和密码?加载与用户名和密码匹配的单个用户不是更容易吗
- 加载单个用户将允许删除
while()
- 在PHP中,不要使用
mysql\u查询
do使用PDO(如果需要,通过谷歌了解为什么更好)
- 检查您的输入(我同意,这里是完全可选的)
- 切勿以纯文本格式存储密码
您可能可以这样做(我已经多年没有使用PHP/PDO了,所以代码可能不精确):
您可以始终将“somepage.php”放在文档根上。这是防止直接执行的常见方法
例如,如果您的Web服务器看起来像'project/public_html/index.php',请将您的管理员仅包含在'project/somepage.php'中,然后使用类似include(../somepage.php)的内容引用它
显然,这需要根据您使用的实际路径进行调整。如果权限发生更改,我假设有一个登录过程,然后可以设置会话变量。我认为这可能是完成OP的最简单方法。我不是一个PHP的人,但如果这是像ASP,那么它将只在满足条件时呈现html,这只会向管理员显示内容。好的,谢谢你,我不知道这一点,现在我明白了。不客气。您可以通过将访问变量保存为int来扩展它,使其具有多个访问级别或任何您喜欢的级别。此外,您可能希望只查询用户名/密码,而不是获取所有用户。其他人在下面提到了这一点,永远不要忘记SQL注入。我认为如果存在(…
部分,中可能缺少一个括号。另外,根据,sha1($password);
将是一个40个字符的字符串,而不是20个字符。为了安全起见,请阅读@MainMa的帖子!
if (strlen($username)> 128)
{
// Something wrong. The username is too long.
}
$hash = sha1($password);
$sth = $dbh->prepare('if exists(select * from users where isadmin = 1 and username = :username and password = :password) select 1 else select 0');
$sth->bindParam(':username', $username, PDO::PARAM_STR, 128);
$sth->bindParam(':password', $hash, PDO::PARAM_STR, 40);
$sth->execute();
$isFound = $sth->fetchAll();
if ($isFound)
{
// User entered correct username and password.
echo 'ALLOW';
}