【问题标题】:How to stop users from being able to editing each other iformation如何阻止用户相互编辑信息
【发布时间】:2021-10-26 19:55:40
【问题描述】:

答案可能很简单,但我一直在想办法,但我不能。

我为每个“当前”登录并拥有注册帐户的用户创建了一个个人资料页面,但问题是任何人都可以使用链接访问彼此的个人资料并对其进行编辑。例如:

https://localhost/profile.php?username=Msprite 可以轻松访问 https://localhost/profile.php?username=Msprite2 通过调整链接,输入他们的用户名。

当访问个人资料时,用户点击下面的代码被重定向到他们的个人资料,并使用 $_SESSION 来存储他们的用户名。

`echo '<td><a href="profile.php?username=' . $_SESSION['loggedin'] . '">' . '' . ' ' . $_SESSION['loggedin'] . ' </a></td>'; 

我是否试图以错误的方式进行操作?是否有另一种方法可以分别显示每个用户的设置。如何阻止用户访问其他用户的信息。

session_start(); if (!isset($_SESSION['username'])) {
header('Location: admin/index.php');
exit;

}

if 语句检查用户是否登录,有没有办法检查用户是否是试图访问其帐户信息的实际合法用户?

【问题讨论】:

  • 您只需检查当前登录的用户是否与他们正在访问的个人资料页面相同,并(禁止)允许他们基于此执行某些操作。
  • 我该怎么做?
  • Msprite 存储在哪个会话变量中?您甚至不需要 URL 中的名称,只需发送到 profile.php 并从会话中获取他们的用户名信息。检索和保存信息的代码示例是什么?
  • 好点,我认为您必须在 url 中存储一个 id(在我的情况下是用户名)才能检索其信息。我试试看。

标签: php mysql session xampp


【解决方案1】:

由于您在链接中显示名称 Msprite 并且链接代码使用 $_SESSION['loggedin'] 我假设这是登录用户名。

您不需要链接中的用户名,只需在profile.php上使用即可:

session_start();

if(isset($_SESSION['loggedin'])) {
    // SELECT info1, info2 FROM user_table WHERE username =  $_SESSION['loggedin']
    // Do profile stuff
} else {
    header('Location: admin/index.php');
    exit;
}

【讨论】:

    【解决方案2】:

    您应该使用 POST 方法发送该信息并识别用户是否是试图访问以修改其个人资料/信息的用户。

    如果设置了会话,那么在您执行的验证中,它是正确的,但您必须放置第二个条件,验证会话具有访问权限的用户的值。

    我不知道您在哪里获得用户信息,但假设您允许特定用户,它会是这样的:

    <?
    if(isset($_SESSION['username']) && $_SESSION['username'] == 'Msprite'){
       echo 'access granted';
    }else{
       echo 'U dont have perms';
    }
    ?>
    

    如果您从数据库中获取数据,请执行查询,然后在条件下比较会话“用户名”的值属于在同一数据库中注册的用户。

    【讨论】:

    • 这是我一直在寻找的,但是,有没有办法在手动设置“Msprite”的地方自动存储登录的“用户名”?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多