【问题标题】:Disabling Forward and Back Buttons + php禁用前进和后退按钮 + php
【发布时间】:2010-01-28 03:02:00
【问题描述】:

我几乎完成了(我以为我完成了)用 php 编写这个登录页面。当用户输入详细信息并按下登录按钮时,一切正常。

但是在用户登录后,他们可以使用浏览器上的前进和后退按钮在两个页面之间切换。

有没有办法阻止这种情况发生?基本上当在登录页面时,他们不应该能够转发到下一页。

(第一页,登录页面。)

<form method="post" action="selectQuery.php">
<table width="768" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="118" height="34">Name:</td>
    <td width="650"><select name="username"  id="username">
     <option value="fredk">Fred</option>
      <option value="arbonk">Arbon</option>
      <option value="arsalana">Arsalan</option>
      <option value="minhn">Minh</option>
      <option value="nathanielg">Nathaniel</option>
    </select></td>
  </tr>
  <tr>
    <td height="33">Password:</td>
    <td><input name="password" type="password" value="password" maxlength="16" /></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><input type="submit" value="Login" /></td>
  </tr>
</table>
</form>

(第二页)

<?php
$username = $_POST['username'];
$password = $_POST['password'];
$referer = $_SERVER['HTTP_REFERER'];

#connection to server
$connection = @mysql_connect ( "***.***.**.*" , "****", "*******") or die ("Could not connect to server");

#connection to database
$rs = @mysql_select_db ( "one", $connection ) or die ("Could not connect to Database");

#the sql query
$sql = "SELECT * FROM `users` WHERE user_name = \"$username\" AND password = \"$password\"";

#executing the query
$results = mysql_query( $sql, $connection ) or die ("Could not connect to Database");

#counts the no of rows that much the query
$row = mysql_num_rows($results);
##$rows = count(row);

#checks to see if password field is left blank
#if so it will return the user back to the login page
#if there is a match then we assume that the login is authenticated


if (empty($password) || $row == 0)
 {
  header( "Location:$referer" ); exit();
 }

else 
{

 if ($username == 'fredk')
 { $fname = 'Fred'; }
 else if ($username == 'arbonk')
 { $fname = 'Arbon'; }
 else if ($username == 'arsalana')
 { $fname = 'Arsalan'; }
 else if ($username == 'minhn')
 { $fname = 'Minh'; }
 else if ($username == 'nathanielg')
 { $fname = 'Nathaniel'; }

 $msg = "Hi $fname, your login was successfull. <p></p>";

 echo($msg);

}

?>

第 2 页上的代码应该检查登录是否正确,如果一切正常,我还有一些额外的代码(一个表单和另一个数据库查询)对用户可见。

【问题讨论】:

    标签: php login login-control


    【解决方案1】:

    如果用户已登录,则始终从登录页面重定向到第一页,如果用户未登录,则始终重定向到登录页面。

    其他页面

    if(!$_SESSION['user']){

    header("位置:$login");

    }

    【讨论】:

      【解决方案2】:

      我将在您的登录脚本中添加一些明显的问题。

      • 如果我的密码是 1" OR 1=1 会发生什么
      • 如果我的浏览器不发送引荐来源网址怎么办?
      • @ 不是抑制错误的好方法。

      我认为对于您的问题,您应该研究 PHP 会话。

      我认为与其禁用后退和前进按钮,不如使用它们。人们希望它们能够正常工作。

      【讨论】:

        【解决方案3】:

        我用来欺骗浏览器的方法是永远不要真正更改它正在查看的 URL。 POST 到设置会话变量的单独页面,然后重定向回使用会话变量的初始页面,例如大 finite state machine

        【讨论】:

          【解决方案4】:

          在您的第二个页面中,验证登录后,您应该重定向到另一个页面,例如Wellcome 页面,这将阻止返回/前进按钮进入验证页面。 同样在登录页面中,您可以检查用户是否已经登录,如果是这种情况,您将重定向到 Wellcome 页面。

          除了如果用户已经登录,那么他/她可以使用前进按钮访问他/她已经访问过的页面有什么问题?

          【讨论】:

            【解决方案5】:

            他们可以进入“受保护”页面,但他们不能在那里做任何事情......因为在下一次加载时,页面会将他们重定向到登录表单。 :)

            【讨论】:

            • 是的,这是第一次工作,但是一旦用户成功登录,他们可以使用后退按钮返回(我猜这很好),当他们返回登录页面时可以使用前进按钮进入下一页(这不好)。
            猜你喜欢
            • 2013-03-29
            • 2011-08-31
            • 1970-01-01
            • 2011-11-21
            • 1970-01-01
            • 2011-01-20
            • 2010-10-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多