Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP问题-如何通过更改URL阻止用户导航到其他页面_Php - Fatal编程技术网

PHP问题-如何通过更改URL阻止用户导航到其他页面

PHP问题-如何通过更改URL阻止用户导航到其他页面,php,Php,我有一个resetpwd.php页面,当在数据库中重置用户密码时会显示该页面。但是,未重置密码的用户可以通过手动将URL更改为“/resetpwd.php”来访问此页面。如何防止这种情况发生?您不能简单地通过键入URL来阻止人们访问它。最好是在重置用户密码时设置一个标志,并重定向未标记帐户的用户 也许值得考虑一下为什么需要对用户“隐藏”此页面。例如,您可以直接导航到。查看该页面并不意味着发生了实际的服务器错误,但如果您有意键入该URL,您应该直观地意识到这一点。您不能简单地通过键入URL阻止人们

我有一个resetpwd.php页面,当在数据库中重置用户密码时会显示该页面。但是,未重置密码的用户可以通过手动将URL更改为“/resetpwd.php”来访问此页面。如何防止这种情况发生?

您不能简单地通过键入URL来阻止人们访问它。最好是在重置用户密码时设置一个标志,并重定向未标记帐户的用户


也许值得考虑一下为什么需要对用户“隐藏”此页面。例如,您可以直接导航到。查看该页面并不意味着发生了实际的服务器错误,但如果您有意键入该URL,您应该直观地意识到这一点。

您不能简单地通过键入URL阻止人们访问该页面。最好是在重置用户密码时设置一个标志,并重定向未标记帐户的用户


也许值得考虑一下为什么需要对用户“隐藏”此页面。例如,您可以直接导航到。查看该页面并不意味着发生了实际的服务器错误,但是如果您有意键入该URL,您应该能够直观地意识到这一点。

实际上不可能阻止更改URL,因为HTTP服务器并不真正关心是否在您提供给用户的页面上单击了URL,或在浏览器的位置栏中键入


相反,在
resetpwd.php
中添加一些代码,以检查访问它的用户是否被允许这样做,即是否在数据库中重置了他的密码。如果没有,只需退出脚本或将用户重定向到其他页面。

实际上不可能阻止更改URL,因为HTTP服务器并不真正关心URL是在您提供给用户的页面上单击的,还是在浏览器的位置栏中键入的


相反,在
resetpwd.php
中添加一些代码,以检查访问它的用户是否被允许这样做,即是否在数据库中重置了他的密码。如果没有,只需退出脚本或将用户重定向到其他页面。

否定答案也是合法答案。别管它

不。
别管它。没有理由阻止访问此页面

否定回答也是合理的回答。别管它

不。
别管它。没有理由阻止访问此页面

取决于用户如何进入该页面。 我有一个想法:


if($\u会话['userid']!=$\u获取['id'])
{
//检查用户是否已登录
if($\u会话['signed\u in']==true)
{
//取消设置所有变量
$\u会话['signed\u in']=NULL;
$\u会话['user\u name']=NULL;
$\u会话['user\u id']=NULL;
回声“错误”;
}
其他的
{
回音“帮个忙,再次登录,谢谢”;
}
回显“self.close();”;
模具();
}


如果有人想访问这个包含私有数据的页面,我只需将用户id与会话用户id进行比较,如果两者不相等(用户试图通过浏览器端进入),我会让他注销并用javascript行关闭窗口,然后中止其他所有操作。

取决于用户如何访问该页面。 我有一个想法:


if($\u会话['userid']!=$\u获取['id'])
{
//检查用户是否已登录
if($\u会话['signed\u in']==true)
{
//取消设置所有变量
$\u会话['signed\u in']=NULL;
$\u会话['user\u name']=NULL;
$\u会话['user\u id']=NULL;
回声“错误”;
}
其他的
{
回音“帮个忙,再次登录,谢谢”;
}
回显“self.close();”;
模具();
}


如果有人想访问这个包含私有数据的页面,我只需将userid与会话user_id进行比较,如果它们不相等(用户试图通过浏览器端进入)我让他注销,然后用javascript行关闭窗口,并中止所有其他操作。

为什么用户可以访问该页面会有问题?如果用户没有请求密码重置,为什么用户可以访问该页面?为什么不?只要密码没有被更改,那有什么害处?@Olimicus03如果这个页面不是一个严重的资源消耗(我想如果它只是一个“你的密码被重置”的确认,就不应该是这样),那么你可能会在预防上花费更多的资源,而不仅仅是让人们看到它。从长远来看,您可能会添加额外的代码和开销,这在您尝试修复不存在的问题时是完全不必要的。为什么用户可以访问该页面是一个问题?如果用户没有请求密码重置,为什么用户可以访问该页面?为什么不?只要密码没有被更改,那有什么害处?@Olimicus03如果这个页面不是一个严重的资源消耗(我想如果它只是一个“你的密码被重置”的确认,就不应该是这样),那么你可能会在预防上花费更多的资源,而不仅仅是让人们看到它。从长远来看,您可能最终会添加额外的代码和开销,而这在您试图修复不存在的问题时是完全不必要的。这意味着,如果用户必须使用此服务,则无法登录它的重置密码页面。这意味着,如果用户必须使用此服务,则无法登录。嗯,不应该有任何理由阻止访问此页面。如果有,你有一个设计错误…嗯,不应该有任何理由阻止访问此页面。如果有,您有一个设计错误。。。
if($_SESSION['userid'] != $_GET['id'])
{
//check if user if signed in
if($_SESSION['signed_in'] == true)
  {
        //unset all variables
        $_SESSION['signed_in'] = NULL;
    $_SESSION['user_name'] = NULL;
    $_SESSION['user_id']   = NULL;
    echo 'Error';
  }
  else
  {
    echo 'Por favor, log in again. Gracias.';
  }
echo '<script type="text/javascript">self.close();</script>';
die();
}