我一直在使用PHP和JavaScript来构建我爸爸的网站。他希望将登录系统整合到他的网站中,并且我使用PHP进行系统设计。我的问题是,如果此人登录,我该如何显示按钮?
例如 - 您有主页,产品,关于我们和联系。我希望有经销商,经销商的按钮,如果用户已登录,可能还有其他信息。所以我将 Home ,产品,关于我们,联系人,经销商(如果是经销商登录),经销商(如果经销商登录),等等。
JavaScript是一个很好的方法,或者PHP,或者甚至两者兼而有之?使用JavaScript显示和隐藏按钮,使用PHP检查以查看要显示的按钮。
答案 0 :(得分:19)
关于安全性,您不能相信来自客户端的内容:
这意味着隐藏按钮是良好的用户界面设计(因为如果您未登录,则无法使用它们)。但它不是安全功能。安全功能是在服务器上检查访问者在每个需要它的操作之前登录。
如果您不打算显示按钮,将HTML和图像发送到浏览器然后使用Javascript隐藏它们没有用。我会用PHP检查。
答案 1 :(得分:8)
在您的菜单文件中或w / e中,您输入:
<? require 'auth.php' ?>
<ul>
<li><a href="">Home</a></li>
<li><a href="">Products</a></li>
<? if( loggedin() ): ?><li><a href="">Secret area</a></li><? endif; ?>
</ul>
然后在需要auth的页面中执行此操作:
<?php
require 'auth.php';
require_login();
?>
auth.php可能包含:
<?php
function loggedin(){
return isset( $_SESSION['loggedin'] );
}
function require_login(){
if( !loggedin() ){
header( 'Location: /login.php?referrer='.$_SERVER['REQUEST_URI'] );
exit;
}
}
?>
答案 2 :(得分:2)
如果使用javascript隐藏按钮,则会在应用程序中打开安全漏洞。恶意用户可以禁用javascript或应用他们自己的一些来绕过你的安全。
我建议使用PHP来选择是否渲染按钮。我经常在.NET中这样做。
当用户尝试使用限制按钮时,您应该能够在服务器端检查用户的访问权限。
答案 3 :(得分:1)
我们在工作中所做的是拥有一个库,提供诸如检查用户是否已登录等功能。例如:
<?php
require_once 'Auth.php';
// output some html
if (isLoggedIn()) {
echo 'html for logged in user';
}
// rest of html
对于只有经过身份验证的用户应该看到的页面,控制器会检查他们是否已登录,如果没有,则会将其重定向到登录页面。
<?php
public function viewCustomer($customerId) {
if (!isLoggedIn())
redirectToLoginPage();
}
答案 4 :(得分:1)
Christian Lescuyer所写的一切都是正确的。但是请注意,他说“我愿意”,而不是“你应该”。选择并不那么容易。
首先,安全性不是选择中的问题。执行操作时,应该在服务器上进行安全检查。哪个代码决定显示/隐藏导致该操作的按钮是无关紧要的。
这让我们只有一个缺点就是在Javascript中执行显示/隐藏逻辑 - 发送给用户的HTML比必要的大。这可能不是什么大问题。
在PHP中显示/隐藏逻辑确实有一个减号。所需的PHP代码通常是tag soup。 Akira的代码提供了一个很好的例子,说明它通常是如何完成的。
对应的Javascript代码可能看起来像这样:
if (logged())
{
elementSecretArea.style.display = "list-item";
}
(假设可以隐藏的元素默认显示为:)
此样式还允许很好的“Ajax”场景:用户看到没有秘密区域的页面,输入密码,看到所有秘密区域而不刷新页面。
因此,如果您已经有一个脚本在文档加载时因其他原因而运行,我会认真考虑在那里显示/隐藏逻辑。
答案 5 :(得分:0)
基本上你在html中有你的菜单,比如列表<ul> <li>Home</li> </ul>
你在最后一项</li>
之后添加php:
<?php
if($session-logged_in) {
?>
<li>My Account</li>
<?php
}
?>