0

我要做的就是将用户登录时的用户名、登录时间和 IP 地址插入数据库。这实际上需要几行 PHP 代码,但是在多个论坛中请求帮助并尝试之后许多不同的解决方案对于 ASP 来说似乎是一项不可能完成的任务。

我得到的最接近的是将其添加到前端 aspx 页面(登录后重定向的位置):

if (Request.IsAuthenticated)

问题是我无法让它在之后插入以挽救我的生命。选择进入网格视图?没问题。在页面加载时插入数据?没门。

我不敢相信以前没有人遇到过这种情况。

其他注意事项

  • 该站点不会加载到 Visual Studio 中。

  • 我试图编辑临时目录中的 .cs 文件,但似乎没有任何反应

  • 我正在编辑 webroot 目录中的 .aspx 文件。

  • 我很乐意直接使用 C#,但我不知道如何添加到 aspx 页面的中间

4

2 回答 2

0

您可以使用ASP.NET 成员资格提供程序,如果您使用的是 SQL-Server,则可以从SqlMembershipProvider.

然后你可以覆盖ValidateUser并记录它是否返回false(或总是)。

bool isValid = base.ValidateUser(username, password);

您可以通过以下方式获取ip:

public static void logWrongPasswordAttempt(string userName, string passWord)
{
    // Look for a proxy address first
    var IP = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
    //Trim and lowercase IP if not null
    if ((IP != null))
    {
        IP = IP.ToLower().Trim();
    }
    if (IP == null || IP.Equals("unknown"))
    {
        //If IP is null use different detection method else pull the correct IP from list.
        IP = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToLower().Trim();
    }

    List<string> IPs = null;
    if (IP.IndexOf(",") > -1)
    {
        IPs = IP.Split(new[]{','}, StringSplitOptions.None).ToList();
    }
    else
    {
        IPs = new List<String>() { IP };
    }

    foreach (string ip in IPs)
    {
        // insert your record into database
    }
}
于 2013-02-04T22:27:27.997 回答
0

听起来您正在使用预编译的站点 - 所以,编辑代码什么都不做?

如果您可以完全控制代码,那么在该事件处理程序中插入数据库应该是一件简单的事情——我们一直都在这样做。您是在使用标准 ADO 代码还是尝试使用一些数据绑定控件或其他东西?只需一个直接的 ADO 调用就足够了......

你知道……这东西……

SqlConnection connection = new SqlConnection(connectionString))
SqlCommand command = new SqlCommand(queryString, connection);

connection.Open();
SqlDataReader reader = command.ExecuteQuery();
于 2013-02-04T23:10:34.770 回答