禁用前进和后退按钮+ php

时间:2010-01-28 03:02:01

标签: php login login-control

我已经差不多完成了(我想我已经完成了)在php中编写这个登录页面。当用户输入详细信息并按下登录按钮时,一切正常。

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

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

(第1页,登录页面。)

<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>

(第2页)

<?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页上的代码应检查登录是否正确,如果一切正常,我会有一些额外的代码(表单和另一个数据库查询),这些代码对用户可见。

5 个答案:

答案 0 :(得分:3)

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

其他页面

if(!$ _ SESSION ['user']){

标题(“位置:$ login”);

}

答案 1 :(得分:2)

我只会在你的登录脚本中添加一些明显的问题。

  • 如果我的密码为1" OR 1=1
  • 会怎样?
  • 如果我的浏览器没有发送推荐人怎么办?
  • @不是抑制错误的好方法。

我认为你的问题应该研究PHP会议。

我认为不应该禁用后退和前进按钮,而应该使用。人们希望他们能够正常工作。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

除此之外,如果用户已经登录,那么他/她可以使用转发按钮访问他/她已访问过的页面的问题是什么?