当前位置: 首页 > 面试题库 >

PHP / Ajax:如何在$ _SESSION变量值上显示/隐藏DIV?

尉迟哲瀚
2023-03-14
问题内容

我在网上搜索了很多主题,这些主题讨论了会话变量以及如何通过Ajax从Javacript中获取它们。但是,尽管我已经能够做到这一点,但这并不能完全解决我的问题。

目的

在线提供在线库存管理。

约束条件

  • 只有经过身份验证的用户才能管理在线库存
  • 库存管理控件对未经身份验证的用户是隐藏的
  • 每个部分都必须独立地获得认证通知,以便相应地显示/隐藏其控件

代码样本

  • authenticate.php
  • project.js
  • index.php
  • atv.php
  • atv-inventory-list.php
  • sectionhandler.php

index.php

<?php session_start(); ?>
<html>
...
    <div id="newAtvDialog" title="Input information on the new ATV">
        <form id="newAtvAjaxForm" action="addNewAtv.php" method="post">
        ...
        </form>
    </div>
    <div id="section">
        <$php echo file_get_contents("inventory-sections.html"); ?>
    </div>
...
</html>

authenticate.php

<?php
require_once "data/data_access.php";

$userName = "";
$password = "";

if (isset($_REQUEST["userName"])) $userName = $_REQUEST["userName"];
if (isset($_REQUEST["password"])) $password = $_REQUEST["password"];

$isAuthentic = isAuthenticUser($userName, $password);
$_SESSION["isAuthentic"] = $isAuthentic;
echo $isAuthentic;

// I try to use the below-written function where ever I need to show/hide elements.
function isCurrentUserAuthenticated() { 
    return isset($_SESSION["isAuthentic"]) && $_SESSION["isAuthentic"]; 
}
?>

project.js

$(document).ready(function() {
    $("#newAtvDialog").dialog({
        autoOpen: false,
        closeOnEscape: true,
        modal: true,
        width: 1000
    });

    $("#newAtvAjaxForm").ajaxForm(function(data) {
        $("#newAtvDialog").dialog("close");
        $("#section").load("sectionhandler.php?section=atv&type=-1&make=0&year=0&category=0", function(event) { $("button").button(); }); 
    });
});

atv.php

<div id="newAtvButton"> <!-- This DIV is to be hidden when not authenticated -->
    <button id="addNewAtvButton">Add New ATV</div>
</div>
<div id="criterion">
    ...
</div>
<div id="atv-inventory">
    <?php include ('atv-inventory-list.php'); ?>
</div>

atv-inventory-list.php

<?php 
$type = -1;
$make = 0;
$year = 0;
$category = 0;

if (isset($_REQUEST["type"])) $type = $_REQUEST["type"];
...

$atvs = getAllAtvs($type, $make, $year, $category);
foreach ($atvs as $value=>$atv):
?>
<div class="inventory-item">
    <img src="<?php echo utf8_decode($atv->getPathToImage())">
    <div class="item-title">
    ...
    </div>
    <div id="commands">
    <!-- This is the way I have tried so far, and it doesn't seem to work properly. -->
        <button id="removeAtvButton" 
           class="<?php echo isCurrentUserAuthenticated() ? 'show' : 'hide'; ?>">
           Remove ATV
        </button> 
    </div>
</div>

sectionhandler.php

$section = "";
if (isset($_REQUEST["section"])) $section = $_REQUEST["section"];

$type = -1;
$make = 0;
$year = 0;
$category = 0;

// getting values from $_REQUEST[]

$activatedSection = "";

switch($section) {
    case "atv": $activatedSection = "atv.php";
    ...
}

$file = $url.raw_url_encore($activatedSection);
include $file;

补充思想

我想到设置一个布尔会话变量,该变量将在用户闲置约20分钟后过期,从而迫使他再次登录。

我知道我不使用数据库中存储的密码。这是该站点中身份验证的第一步,我将很快上线,因为客户端将很快请求交货。下一步将是加密密码。但是首先,我需要显示/隐藏功能才能正常工作。

我还考虑过cookie,并且对于Web开发来说还很陌生,所以我不确定哪种方法最好。就我而言,最简单的是最好的,只要它意味着最低的安全性即可。毕竟这不是NASA网站!;-)

感谢大家的投入!=)


问题答案:

这是一个主意,但您可以继续/从中进行;

actionURL 是一个php文件,您可以在其中检查用户是否使用有效会话登录。

__如果用户已登录,则 ajaxSession 函数将返回true或false。

然后,您可以每X秒/分钟调用一次此函数,以控制会话是否仍在进行。

window.setInterval(function(){
  // call your function here
  if(ajaxSession(actionUrl)){
      //return true, user logged, append/show protected divs.

  }else{
      //return false, remove/hide protected divs and ask user to log.

  }    
}, 5000); //every 5 seconds.

ajaxSession函数:

 function ajaxSession(actionUrl) {
        var sessionOK= false;

        $.ajax({
        async: false,
        url: actionUrl,
        success: function(msg) {
             // check the return call from the php file.
              if(msg== 'OK'){ 
                 sessionOK = true;
              }else{
                 sessionOk = false;
              }
        }});

        return sessionOK;
    }

编辑

我将为 actionUrl 添加示例代码,如果会话是否已设置到 ajaxSession 函数,它将返回:

<?php
    session_start();

    // $_SESSION['reg'] is true when the user is logged in.
    if($_SESSION['reg'] == true){
        echo 'OK';
    }else{
        echo 'NO';
    }
?>

记住要在ajaxSession函数中检查Ajax调用的结果。如果可以,则sessionOk = true,否则,sessionOk = false。



 类似资料:
  • 问题内容: 我想根据变量是否为null显示/隐藏div。 注意:在我的情况下,变量是一个对象。 这是一个非常简单的问题,但我似乎无法使其正常工作。 谢谢。 问题答案: 需要澄清的是,上面的示例确实有效,示例中的代码由于不相关的原因而无法正常工作。 如果myvar为false,null或之前从未使用过(即从未调用过$ scope.myvar或$ rootScope.myvar),则div将不会显示。

  • 我试图根据仪表板变量值在图形面板上显示/隐藏查询。 动机 在同一个图形面板(用于显示多个主机)上,我有两个查询: 和: 其中是一个计数器。 第一个是一个通常的比率,它更适合显示趋势,另一个更复杂一些,但显示所有选择。当然,我想为图表制作一个面板,但也有一些开关,如趋势/选择来分析两者。我引入了一个带有自定义值的grafana dashboard变量,但我不明白如何使用它来隐藏或显示特定的查询。 此

  • 主要内容:实例,jQuery hide() 和 show(),实例,实例,实例,jQuery toggle(),实例隐藏、显示、切换,滑动,淡入淡出,以及动画,哇哦! 因为时间是宝贵的,我们提供快捷方便的学习方法。 在小牛知识库,你可以学习需要的知识。 实例 jQuery hide() 简单的jQuery hide()方法演示。 jQuery hide() 另一个hide()实例。演示如何隐藏文本。 jQuery hide() 和 show() 通过 jQuery,您可以使用 hide() 和

  • 问题内容: 我正在尝试创建一个程序,该程序执行一系列给定的用户输入。仅在某些情况下才需要几个用户输入,并且如果可能的话,我想仅在选择一个Checkbutton(表示存在要求这些输入的情况)时显示这些输入值的Entry框和Labels。我不确定该怎么做: 将我要添加的标签和条目框放在已经存在的行之间。 取消选中“选择”按钮时,“隐藏”标签和输入框,而不进行选择,这样,如果重新选择“选择”按钮,则可以

  • 问题内容: 在我的脚本中有三个div。我想在第一行悬停时显示div ,而在第二行悬停时显示。否则,我想默认显示div 。 但它永远不会显示带有的div 。 问题答案: 你需要 原始CSS中的问题是in css选择器启动了一个全新的选择器。它没有结合..所以意味着和。您将其设置为始终对所有元素都隐藏。