带隐藏按钮的登录脚本

时间:2008-08-10 04:00:07

标签: javascript php

我一直在使用PHP和JavaScript来构建我爸爸的网站。他希望将登录系统整合到他的网站中,并且我使用PHP进行系统设计。我的问题是,如果此人登录,我该如何显示按钮?

例如 - 您有主页产品关于我们联系。我希望有经销商经销商的按钮,如果用户已登录,可能还有其他信息。所以我将 Home 产品关于我们联系人,经销商(如果是经销商登录),经销商(如果经销商登录),等等。

JavaScript是一个很好的方法,或者PHP,或者甚至两者兼而有之?使用JavaScript显示和隐藏按钮,使用PHP检查以查看要显示的按钮。

6 个答案:

答案 0 :(得分:19)

关于安全性,您不能相信来自客户端的内容

  • 访问者可以看到所有代码(HTML和Javascript,而不是PHP)并尝试使用
  • 访问者甚至可能不使用浏览器;使用脚本发送请求非常容易

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

如果您不打算显示按钮,将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  
  }
?>