带有隐藏按钮的登录脚本
我一直在使用PHP和JavaScript来构建我父亲的网站。他想将登录系统集成到他的网站中,而我已经使用PHP设计了该系统。我的问题是,如果此人已登录,如何显示按钮?----------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------
例如,我们有主页,产品,关于我们和联系方式。如果用户已登录,我想拥有用于经销商,分销商以及其他信息的按钮。因此,我将拥有主页,产品,关于我们,联系人,经销商(如果经销商登录),分销商(如果经销商登录)等等。向前。
JavaScript是执行此操作的好方法,还是PHP,或者甚至两者兼而有之?使用JavaScript来显示和隐藏按钮,并使用PHP来查看要显示的按钮。
解决方案
回答
如果使用javascript隐藏按钮,则会在应用程序中打开一个安全漏洞。恶意用户可以禁用javascript或者应用一些自己的脚本来绕过安全性。
我建议使用PHP选择是否渲染按钮。我经常在.NET中执行此操作。
每当他们尝试使用受限按钮时,我们也应该能够在服务器端检查用户的访问权限。
回答
关于安全性,我们不能信任来自客户端的内容:
- 访客可以看到所有代码(HTML和Javascript,而不是PHP)并尝试尝试
- 访客甚至可能不使用浏览器;使用脚本发送请求非常容易
这意味着隐藏按钮是好的用户界面设计(因为如果未登录,则无法使用它们)。但这不是安全功能。安全功能是在服务器上检查访问者是否已在需要访问者的每个操作之前登录。
如果我们不想显示按钮,则将HTML和图像发送到浏览器然后用Javascript隐藏它们是没有用的。我会用PHP检查的。
回答
我们在工作中所做的就是拥有一个库,该库提供诸如检查用户是否登录的功能。例如:
<?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(); }
回答
在菜单文件中或者我们输入的内容中:
<? 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>
然后在需要身份验证的页面中执行以下操作:
<?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; } } ?>
回答
克里斯蒂安·莱斯库耶(Christian Lescuyer)所写的一切都是正确的。但是请注意,他说"我会"而不是"我们应该"。选择不是那么容易。
首先,安全性不是选择的问题。执行动作时,应该在服务器上进行安全检查。哪个代码决定显示/隐藏导致操作的按钮是不相关的。
这仅给我们留下了一个缺点,那就是用Javascript执行显示/隐藏逻辑,发送给用户的HTML超出了必要。这可能没什么大不了的。
但是,在PHP中具有显示/隐藏逻辑的确有弊。所需的PHP代码通常是标签汤。 Akira的代码提供了一个通常如何完成的很好的示例。
相应的Javascript代码可能看起来像这样:
if (logged()) { elementSecretArea.style.display = "list-item"; }
(假设可以隐藏的元素默认显示为display:none)。
这种样式还允许使用漂亮的" Ajax"方案:用户看到一个没有机密区域的页面,输入密码,看到该机密区域,而无需刷新页面。
因此,如果我们已经有一个脚本因其他原因在加载文档时运行,那么我将认真考虑在那里显示/隐藏逻辑。
回答
基本上是在html菜单中,在列表<< ul> <li> Home </ li> </ ul>中,我们要在最后一项的<< / li>之后添加php:
<?php if($session-logged_in) { ?> <li>My Account</li> <?php } ?>