我一直在使用 PHP 和 JavaScript 来构建我父亲的网站。他想在他的网站中加入一个登录系统,我使用 PHP 设计了该系统。我的问题是,如果该人已登录,如何显示按钮?

例如 - 你有 , 产品, 关于我们, , 和 接触. 。我想要按钮 经销商, 经销商, ,如果用户已登录,可能还有其他信息。所以我会有 , 产品, 关于我们, 联系方式, 经销商(如果经销商登录), 经销商 (如果经销商登录),等等。

JavaScript 是实现此目的的好方法还是 PHP 或两者都可以?使用 JavaScript 显示和隐藏按钮,并使用 PHP 检查要显示的按钮。­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

有帮助吗?

解决方案

关于安全性, 你不能相信来自客户的信息:

  • 访问者可以看到您的所有代码(HTML 和 Javascript,而不是 PHP)并尝试一些东西
  • 访问者甚至可能不会使用浏览器;使用脚本发送请求非常简单

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

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

其他提示

在您的菜单文件或 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 隐藏按钮,则会在应用程序中打开一个安全漏洞。恶意用户可以禁用 JavaScript 或应用自己的一些 JavaScript 来绕过您的安全。

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

每当用户尝试使用受限按钮时,您都应该能够在服务器端检查用户的访问权限。

我们在工作中所做的是建立一个库,提供诸如检查用户是否登录等功能。例如:

<?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();
}

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

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

这使得我们在 Javascript 中执行显示/隐藏逻辑只有一个缺点 - 发送给用户的 HTML 比需要的要大。这可能没什么大不了的。

不过,在 PHP 中显示/隐藏逻辑确实有一个缺点。所需的 PHP 代码通常是 标签汤. 。Akira 的代码提供了一个很好的示例,说明了通常如何完成此操作。

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

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

(假设可以隐藏的元素默认具有 display:none )。

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

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

基本上你的菜单是 html 格式的,比如一个列表 <ul> <li>Home</li> </ul> 你添加 php 之后 </li> 最后一项:

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

<li>My Account</li>

<?php  
  }
?> 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top