Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 健壮的电子邮件验证算法_C#_Asp.net_.net_Sql Server_Asp.net Mvc 3 - Fatal编程技术网

C# 健壮的电子邮件验证算法

C# 健壮的电子邮件验证算法,c#,asp.net,.net,sql-server,asp.net-mvc-3,C#,Asp.net,.net,Sql Server,Asp.net Mvc 3,我正在开发注册向导,目前面临着健壮的电子邮件验证算法的问题 在我们获得用户指定的信息后,如名字,密码,电子邮件,我们应该将此信息保存到数据库中。我们也可以说,对于这个字符串,我们有相应的表 接下来,我们生成一些电子邮件验证令牌(只生成由一堆字符和数字组成的代码),并用一些时间戳将其保存到数据库中(用于超时功能) 因此,我感到沮丧。我对算法的一个要求是有机会不仅发送一次令牌,而且发送多次令牌。我需要这封信的原因是什么样的信不会被发送到电子邮件或一些技术问题在我这边的结果,这封信不会发送 所以,基于

我正在开发注册向导,目前面临着健壮的电子邮件验证算法的问题

  • 在我们获得用户指定的信息后,如
    名字
    密码
    电子邮件
    ,我们应该将此信息保存到数据库中。我们也可以说,对于这个字符串,我们有相应的表

  • 接下来,我们生成一些电子邮件验证令牌(只生成由一堆字符和数字组成的代码),并用一些时间戳将其保存到数据库中(用于超时功能)

  • 因此,我感到沮丧。我对算法的一个要求是有机会不仅发送一次令牌,而且发送多次令牌。我需要这封信的原因是什么样的信不会被发送到电子邮件或一些技术问题在我这边的结果,这封信不会发送

    所以,基于这个原因,让我们回到第一步,允许用户再次填写注册表。现在我们有了用户刚刚输入的数据和以前存储在数据库中的数据

    我们是否应该用新的信息替换数据库中现有的信息

    另一个要求是,电子邮件地址是唯一的,并将用作用户的登录名。所以我们需要将上面的表格转换为新的表格,表格中应该接受一封电子邮件两次或两次以上的内容

    另一个困扰我好几天的问题是如何从DB中删除不必要的令牌?我是否需要在晚上cron一些工作什么通过令牌表并删除不需要的令牌

    我们是否应该用新的信息替换数据库中现有的信息

    考虑到您还没有经过身份验证的用户,我不确定这将如何发生。如果您可以确定输入此信息的用户肯定已经在数据库中,那么请务必更新该信息。然而,考虑到你所从事的领域,我不确定你如何能够可靠地知道这一点

    另一个困扰我好几天的问题是如何从DB中删除不必要的令牌

    考虑到您正在使用Sql Server,我只需要创建一个夜间作业来清除旧令牌

    希望这有帮助

    我们是否应该用新的信息替换数据库中现有的信息

    考虑到您还没有经过身份验证的用户,我不确定这将如何发生。如果您可以确定输入此信息的用户肯定已经在数据库中,那么请务必更新该信息。然而,考虑到你所从事的领域,我不确定你如何能够可靠地知道这一点

    另一个困扰我好几天的问题是如何从DB中删除不必要的令牌

    考虑到您正在使用Sql Server,我只需要创建一个夜间作业来清除旧令牌


    希望这有帮助

    首先,将注册请求与成员表放在一个单独的表中

    其次,当用户注册后,您可以创建一个令牌来验证电子邮件地址。如果用户在X小时内单击验证该令牌的链接,则删除该令牌并在成员资格表中创建用户

    如果用户请求一个新令牌,您只需生成它并发送电子邮件。如果覆盖数据库中的令牌,那么显然第一封电子邮件中的链接将不再有效,这很好——用户只能验证最新的令牌

    如果用户没有在X小时内单击验证令牌的链接,则注册请求会自动清除,用户将不得不重新注册。您确实可以使用cron类型的作业来实现这一点


    我希望这会有所帮助。

    首先,将注册请求与会员表分开放在一个单独的表中

    其次,当用户注册后,您可以创建一个令牌来验证电子邮件地址。如果用户在X小时内单击验证该令牌的链接,则删除该令牌并在成员资格表中创建用户

    如果用户请求一个新令牌,您只需生成它并发送电子邮件。如果覆盖数据库中的令牌,那么显然第一封电子邮件中的链接将不再有效,这很好——用户只能验证最新的令牌

    如果用户没有在X小时内单击验证令牌的链接,则注册请求会自动清除,用户将不得不重新注册。您确实可以使用cron类型的作业来实现这一点


    我希望这能有所帮助。

    我希望您正在对密码进行哈希和盐析。@SLaks是的,我肯定会使用MD5密码哈希来存储密码。我刚刚写了一个简单的例子。MD5不是一个安全的散列。使用bcrypt。我建议您不允许同一用户注册两次!它在您的系统中管理它时会产生问题,并且会惹恼用户,用户必须重新填写表单。@Simon那么,当用户未验证其电子邮件时,会收到一条消息,告诉他此电子邮件已经键入了什么,用户不能使用它,应该输入另一封电子邮件吗?用户如何才能请求另一个与他的电子邮件相关的音调?我希望您正在对密码进行哈希和盐析。@SLaks是的,我肯定会使用MD5密码哈希来存储密码。我刚刚写了一个简单的例子。MD5不是一个安全的散列。使用bcrypt。我建议您不允许同一用户注册两次!它在您的系统中管理它时会产生问题,并且会惹恼用户,用户必须重新填写表单。@Simon那么,当用户未验证其电子邮件时,会收到一条消息,告诉他此电子邮件已经键入了什么,用户不能使用它,应该输入另一封电子邮件吗?用户怎么能请求另一个与他的电子邮件相关的音调呢?谢谢akmad!关于第一个问题:请注意,我们有关于用户的现有信息,以防他试图注册,然后再试一次。谢谢!关于第一个问题:请注意,我们有关于用户的现有信息,以防他试图注册,然后重试。我在独立表中有注册请求,但