【问题标题】:Function still executes from link without active session功能仍然从没有活动会话的链接执行
【发布时间】:2018-02-02 11:37:09
【问题描述】:

我得到了一些在$_GET 中使用值执行的代码,以及一些检查活动会话的代码。然而,当我在没有活动会话的情况下直接访问链接时,它仍然执行该功能,然后返回登录页面。

我的代码:

我的登录标题:

<?php
session_start();
if (!isset($_SESSION['Username'])|| $_SESSION["Actief"] == 0|| 
    $_SESSION["Actief"] == 2) {
    return header("Location: main_login.php");
    exit();
}

我的网页(只有需要的代码):

require "../loginheader.php";
require "../AdminOnlyHeader.php";
// --some code with sql instructions--
$result = ExecuteQuery($sql);`

AdminOnlyHeader 只是为了检查管理员状态。这似乎也可以通过输入链接来绕过。

所以如果你还是不明白我的意思,这里是我所做的一个简短的总结:

  1. 我创建了一个链接,其中包含执行它所需的获取数据;
  2. 我退出并返回登录页面;
  3. 我输入之前做的链接;
  4. 加载后我仍然在登录页面,但是当我查看我的数据库时,我发现记录已更新,因此函数 (ExecuteQuery) 已执行。

【问题讨论】:

    标签: php session get


    【解决方案1】:

    中删除return
    return header("Location: main_login.php");
    

    我们需要两个参考来理解这一点:

    如果从全局范围调用,则结束当前脚本文件的执行。如果当前脚本文件已包含或需要,则控制权将传递回调用文件。

    如果你重定向但你没有die() / exit() 代码总是被执行和显示。


    基本上,由于您返回,它不会到达exit() 部分,这意味着它将执行返回到主脚本 - 具有在这种情况下不应执行的函数的脚本。

    【讨论】:

    • 工作或多或少,它不执行功能(是的),但它返回一个 404 not found 而不是登录页面。
    • 您有main_login.php 文件吗?浏览器中的网址是否正确? @米格尔DP。以前用过吗?
    • 啊,我找到了它的原因。我在另一个目录中。一旦我弄清楚如何在不更改登录头文件的情况下返回,如果您的方法有效,我会进行更新。
    • 是的,现在一切正常。我确实删除了要求并在该特定站点上重新编码了标题,因此评委不会太高兴,但是嘿,它有效。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 2016-05-20
    • 2015-09-08
    • 2019-08-31
    • 2013-01-06
    • 2019-06-23
    • 1970-01-01
    相关资源
    最近更新 更多