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