0

我想在不同的条件下显示具有不同内容的不同 div。

如果客户已登录,则显示内容 A,如果客户未登录,则显示内容 B,

这是我的脚本,不确定它是否正确。

<?php if (!$logged) {


$disp_div=1;

} else { 

$disp_div=0;

} ?>

这是jQuery

<script type="text/javascript" >
$(document).ready(function(){

var show=<?php echo $disp_div; ?>

 if(show==1)
 {
    $('#div_logged_in').show();
    $('#div_not_logged_in').hide();

 }
else if(show==0)
 {
    $('#div_logged_in').hide();
    $('#div_not_logged_in').show();
     }
 });

这是 HTML

<div id="div_logged_in">
Content A
</div>

<div id="div_not_logged_in">
Content B
</div>
4

5 回答 5

6

答:为什么 !$logged 是错误的:

您使用局部变量。下次您的用户刷新页面时,他将不再登录。为此,您可以将变量存储在一个名为 $_SESSION 的数组中。此数组保存在您的网络服务器上以供客户端会话使用。只要用户呆在那里,它就会一直保持不变(直到你改变它)。为此,您需要一个 session_start(); 在你的主要 PHP 脚本的第一行。

B:为什么javascript部分是安全漏洞:

您的网站旨在不过滤发送给用户的内容。每个用户都获得了全部内容,只是可见性发生了变化。通过这种方式,每个高级用户都可以查看您的代码并查看您想要隐藏的所有秘密。

C:正确的方法是什么?

它只是一些在没有 Javascript 的情况下回显 HTML 并使用 $_SESSION 的 PHP:

<?php
    if($_SESSION["loggedIn"] == "yes") { //You have to set that somewhere else just like $logged
    ?>
        <p> You ARE logged in. </p>
    <?php } else { ?>
        <p> You ARE NOT logged in. </p>
    <?php
    }
?>
于 2013-01-29T07:58:16.867 回答
1

我不知道是什么$logged。如果是查找用户是否登录的变量,那么你的条件正好与你的要求相反。您正在显示div_logged_in用户何时未从该条件登录。

if(show==1)
 {
    $('#div_logged_in').show();
    $('#div_not_logged_in').hide();

 }

$logged当为假时,show 的值为 1 。所以改变条件,你会得到它。在这种情况下,我建议您使用SESSIONS。您可以在任何地方使用来检查用户是否已登录。

于 2013-01-29T07:52:12.270 回答
0

首先,您需要开始阅读有关会话和 $_SESSION 超全局的信息。

在那之后,扔掉那个脚本,寻找一个合适的教程,我在这里找到了一个非常好的教程:http: //net.tutsplus.com/tutorials/php/a-better-login-system/ - 虽然它可能是有点先进,因为它谈论 ACL,您可能不需要。

但是,如果您可以尝试并理解本教程的其余部分,那么您应该没问题。祝你好运!

于 2013-01-29T07:51:03.707 回答
0

请不要依赖客户端验证,因为它是您应用程序中的一个安全流程,如果客户查看了您页面的源代码怎么办?然后他们会看到隐藏的内容。

您的方法是正确的,但您必须使用 $_SESSION 或 $_COOKIE 而不是 if (!$logged) 并且正如我所说,不要完全输出内容。

于 2013-01-29T07:53:40.847 回答
0

利用 if($_SESSION["username"])

您可以在 login.php 文件中设置它并在 logout.php 上使用 session_destroy() 将其销毁

于 2013-01-29T15:55:23.107 回答