2008-08-10 111 views
15

我一直在使用PHP和JavaScript构建我父亲的网站。他希望将登录系统合并到他的网站中,并且我已经为使用PHP的系统进行了设计。我的问题是如何显示的按钮,如果人登录使用隐藏按钮登录脚本

例如 - ?你有首页产品关于我们联系。我想,如果用户登录到有按钮经销商经销商,也许其他信息。因此,我将有首页产品关于我们联系,经销商(如果经销商登录),分销商(如果分销商登录)等等。

JavaScript会是一个很好的方式来做到这一点,或将PHP,或甚至两者?使用JavaScript显示和隐藏按钮,以及PHP检查以查看要显示的按钮。

回答

18

在安全方面,你不能相信从客户端随之而来:

  • 参观者可以看到所有的代码(HTML和Javascript,不是PHP)并尝试的东西
  • 参观者可能连使用浏览器;用脚本发送请求非常容易

这意味着隐藏按钮是很好的用户界面设计(因为如果您未登录,则无法使用它们)。但这不是一项安全功能。安全功能正在服务器上检查访问者在每次需要它的操作之前都已登录。

如果您不打算显示按钮,将HTML和图像发送到浏览器然后用Javascript隐藏它们是没有用的。我会检查与PHP。

2

如果您使用JavaScript来隐藏按钮,则会在应用程序中打开一个安全漏洞。恶意用户可能会禁用JavaScript或应用他们自己的某些功能来解决安全问题。

我建议使用PHP来选择是否呈现按钮。我经常在.NET中这样做。

只要用户尝试使用受限制的按钮,您也应该能够在服务器端检查用户的访问权限。

1

我们在我的工作做的是有一个库中提供的功能,例如,如果用户登录检查,例如:

<?php 
require_once 'Auth.php'; 
// output some html 
if (isLoggedIn()) { 
    echo 'html for logged in user'; 
} 
// rest of html 

对于仅authenicated网页的用户应该看到,控制器检查如果他们已经登录,如果没有登录,则将其重定向到登录页面。

<?php 
public function viewCustomer($customerId) { 
    if (!isLoggedIn()) 
     redirectToLoginPage(); 
} 
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> 

然后在需要权威性只是这样做的网页:

<?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; 
     } 
    } 
?> 
+1

要总结一下上面显示:你会检查,看看他们是否有如果他们是,登录,你会显示你只想登录成员看到的按钮/链接。 – Brad 2008-10-16 01:47:16

1

Christian Lescuyer写的所有内容都是正确的。然而,请注意,他说“我会”,而不是“你应该”。选择并不那么容易。

首先,安全性在选择中不是问题。执行操作时,您应该在服务器上进行安全检查。哪个代码决定显示/隐藏导致该操作的按钮是无关紧要的。

这让我们在Javascript中使用show/hide逻辑只有一个缺点 - 发送给用户的HTML比必要的大。这可能不是什么大不了的事。

虽然在PHP中显示/隐藏逻辑确实有一个负数。所需的PHP代码通常是tag soup。 Akira的代码提供了一个很好的例子,说明它通常如何完成。

相应的JavaScript代码可能会是这个样子:

if (logged()) 
{ 
    elementSecretArea.style.display = "list-item"; 
} 

(假设可能被隐藏要素都显示:没有默认值)。

这种风格还允许很好的“Ajax”场景:用户看到一个没有秘密区域的页面,输入密码,看到秘密区域都不刷新页面。

因此,如果您已经有一个脚本在您的文档因其他原因而加载时运行,那么我会认真考虑在那里显示/隐藏逻辑。

0

基本上,你有你的HTML菜单,也就是说,作为一个列表<ul> <li>Home</li> </ul>你的最后一个项目的</li>后加入PHP:

<?php 
    if($session-logged_in) {  
?> 

<li>My Account</li> 

<?php 
    } 
?>