代码之家  ›  专栏  ›  技术社区  ›  Eray Balkanli

如何防止不同用户通过ajax/c#为一个字段保存相同的值?

  •  0
  • Eray Balkanli  · 技术社区  · 6 年前

    function IfEmailExists() {
                    $.ajax({
                        url: "Handler.ashx",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        data: { 'Email': $('#txtEmail').val(), 'Method': 'IfEmailExists' },
                        responseType: "json",
                        success: OnCompleteIfEmailExists,
                        error: OnFail
                    });
                    return false;
                }
    

    下面的函数在中运行处理程序.ashx.cs触发ajax部件后:

    case "IfEmailExists":
      ss = new Staff();
      string Email = context.Request["Email"];
      string IsEmailExist = javaScriptSerializer.Serialize(ss.CheckIfEmailExists(Email));
    
      context.Response.ContentType = "text/html";
      context.Response.Write(IsEmailExist);
      return;
    

    在Staff类中,通过上面的代码触发以下功能:

    public int CheckIfEmailExists(string Email)
    {
       int outputEmail = 0;
       SQLDatabase sqldb = new SQLDatabase();
       DataTable dt = new DataTable();
       dt = sqldb.ExecStoredProcedureDataTable("[spDoesEmailExists]", new SQLParamList().Add("@Email", Email));
       if (dt.Rows.Count > 1)
       {
          outputEmail = 1;
       }
       else
       {
          outputEmail = 0;
       }
       return outputEmail;
    }
    

    Select Email from StaffEmailUsage where Email = @Email
    

    请注意,还有另一个ValidateEmail()函数用于检查电子邮件是否有效。

    在这种结构的帮助下,当用户多次尝试使用电子邮件地址时,他会收到一条错误消息: This email address has been already used! 默认情况下。我试图通过这个,但我总是收到错误。

    问题是,我看到不同的人使用同一个电子邮件地址不止一次。我怎么可能找不到呢。我尝试在电子邮件地址的开头和结尾使用空格,禁用javascript,使用不同的浏览器,但我总是收到错误消息,这是意料之中的。如何防止不同用户多次使用同一电子邮件地址?任何帮助或建议都将不胜感激。谢谢。

    1 回复  |  直到 6 年前
        1
  •  0
  •   hiltononline    6 年前

    在中的电子邮件列上添加唯一约束 StaffEmailUsage 表将防止重复的电子邮件保存到数据库中。有了这个约束,应用程序在任何时候试图保存一封重复的电子邮件时,都会出现一个sql错误,这可能会暴露出用户绕过错误消息的位置或方式。

    ALTER TABLE StaffEmailUsage
    ADD UNIQUE (Email)
    

    依靠错误来寻找问题的根源可能并不理想。仔细检查每个用户可以创建或更新电子邮件的地方,验证是否到位。

    注意:如果表中有重复项,则在解决重复项之前,将无法添加唯一约束。要查找需要修复的行,可以运行以下查询:

    SELECT Email, COUNT(Email) 
    FROM StaffEmailUsage
    GROUP BY Email
    HAVING COUNT(Email) > 1