我已经差不多完成了(我想我已经完成了)在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> </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页上的代码应检查登录是否正确,如果一切正常,我会有一些额外的代码(表单和另一个数据库查询),这些代码对用户可见。
答案 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页面。
除此之外,如果用户已经登录,那么他/她可以使用转发按钮访问他/她已访问过的页面的问题是什么?