Javascript 带有隐藏按钮的登录脚本

Javascript 带有隐藏按钮的登录脚本,javascript,php,Javascript,Php,我一直在用PHP和JavaScript建立我爸爸的网站。他想在他的网站中加入一个登录系统,我有使用PHP的系统设计。我的问题是,如果此人已登录,如何显示按钮在 例如-您有家、产品、关于我们的信息和联系人。我想有按钮经销商,分销商,可能还有其他信息,如果用户登录。所以我会有家,产品,关于我们,联系人,经销商(如果经销商登录),经销商(如果经销商登录),等等 JavaScript是实现这一点的好方法还是PHP,或者两者兼而有之?使用JavaScript显示和隐藏按钮,使用PHP检查要显示的按钮。 如

我一直在用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

在您的菜单文件或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;
        }
    }
?>

克里斯蒂安·莱斯奎尔写的所有东西都是正确的。然而,请注意,他说的是“我愿意”,而不是“你应该”。选择并不是那么容易

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

这就给我们留下了在Javascript中执行显示/隐藏逻辑的一个缺点——发送给用户的HTML超出了需要。这可能没什么大不了的

不过,在PHP中使用show/hide逻辑确实有一个缺点。所需的PHP代码通常是一个。Akira的代码提供了一个很好的示例,说明了它通常是如何完成的

相应的Javascript代码可能如下所示:

if (logged())
{
    elementSecretArea.style.display = "list-item";
}
(假设可以隐藏的元素显示为:默认情况下无)

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


<> P>所以,如果你已经有了一个脚本,当你的文档加载到其他原因时,我会认真考虑在那里显示/隐藏逻辑。

基本上你在HTML中有你的菜单,比如说一个列表<代码> UL>

  • 首页
  • >在最后一个项目<<代码> < /LI> < /代码>之后添加PHP:

    <?php
      if($session-logged_in) {    
    ?>
    
    <li>My Account</li>
    
    <?php  
      }
    ?> 
    
    
    
  • 我的帐户

  • 总结上面显示的内容:您将检查他们是否已登录,如果已登录,您将显示您只希望登录成员看到的按钮/链接。您不能在变量中使用破折号
    <?php
      if($session-logged_in) {    
    ?>
    
    <li>My Account</li>
    
    <?php  
      }
    ?>