PHP登录表单

时间:2009-04-30 20:48:56

标签: php session

 <form action="form.php" method="post">
    Username: <input type="text" name="user" maxlength="50" value="" />
    Password: <input type="password" name="pass" maxlength="20" value="" />
    <input type="submit" name="Submit" value="Submit" />
    </form>
    <?php
    $Accesstrys = 0;
    if($_POST['Submit'] == "Submit") {
    $Accesstrys++;
    if($Acesstrys == 3)
    {
    $ip = getenv("REMOTE_ADDR");
    $file = fopen("Loginlimit/$ip",'w');
    fwrite($file,"$Accesstrys:$ip");
    }   
    }
    ?>

我正在尝试编写一个PHP登录脚本,如果你失败了,你会尝试登录3,它会冻结10分钟。

远未完成,但我测试了它并没有使用我的ip创建/写入文件。我出了什么问题

8 个答案:

答案 0 :(得分:7)

由于PHP是服务器端,因此每个请求都会将$Accesstrys变量设置为0。

关键是使用会话。尝试增加$_SESSION["AccessTrys"]而不是$Accesstrys

答案 1 :(得分:3)

PHP与大多数专门用于Web应用程序的动态语言一样,在无状态环境中运行。为了跟踪HTTP请求之间的登录尝试,您需要为用户提供session

<?php

session_start();
if (!isset($_SESSION['Accesstrys'])) {
  $_SESSION['Accesstrys'] = 0;
}
$_SESSION['Accesstrys']++;
// ... your code goes here ...

答案 2 :(得分:2)

据推测,登录用户名/密码组合未被硬编码到脚本中,而是从某种数据库中检索。在这种情况下,为什么不为每个用户包含一个新列。这解决了用户是否在每次第3次尝试时删除会话cookie的问题。

数据库还允许您在帐户达到3次失败尝试时“锁定”帐户。

如果您确实感到需要安全,可以使用会话和数据库列的混合,但将会话数据存储在数据库中。谷歌有很多关于如何使用set_session_save_handler函数的例子。

答案 3 :(得分:2)

您希望使用数据库来存储重试次数(通过IP地址或更好的用户名),因为正如其他人提到的那样,$ Accesstrys将在每次请求时重置为零。

我很惊讶很多人建议使用会话来跟踪重试次数。那里存在一个基本的安全漏洞 - 如果登录尝试来自试图破解帐户的自动机器人,那么就没有cookie(或URL会话ID),并且您对访问尝试的会话跟踪将毫无用处。

答案 4 :(得分:1)

乍一看似乎你每次都用0覆盖@ Accesstrys,最多给你1个。你应该做的是将$ Accestrys文件设置为0,然后将变量设置为文件,增加变量,然后将文件设置为等于变量。

答案 5 :(得分:1)

你采取的方法有很多问题。例如

  1. REMOTE_ADDR并非每个用户都是唯一的
  2. 除非您照顾同时使用服务器的用户
  3. ,否则将信息写入文件将不起作用
  4. $ Accesstry ++每次使用时都会消失,因此永远不会保存其值。
  5. 等。
  6. 您需要使用名为Sessions的功能,并将信息存储在会话或数据库中。 看看http://us.php.net/manual/en/features.sessions.php

答案 6 :(得分:0)

每次发布​​尝试时,它都会将访问次数重置为0.您需要在服务器端解决方案(如数据库或会话)中存储尝试次数。

修改 正如我在评论中提到的,我之前关于将这些信息放入cookie中的大脑只是最糟糕的做法。感谢社区编辑的明星。

答案 7 :(得分:-1)

我想在代码中添加一个问题而不是检查提交值是否等于它,使用ISSET。

if(isset($_POST['Submit'])) {
// Action code
}

查看如何有效开发登录表单的示例 请参阅以下链接:
Login form sample code
File open and Write - PHP Function
Session to track the value until session expires/browser closed