科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件一个完整、安全的用户登录系统

一个完整、安全的用户登录系统

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在使用PHP编程的时候,我有一个习惯,不太喜欢使用现成的库文件,例如PHPLib或者其它类似的库...

作者:QQ新人类 来源:yesky 2007年10月27日

关键字: Linux

  • 评论
  • 分享微博
  • 分享邮件
再来看另一段有趣的代码,用户怎样才能安全地改变他们的email地址呢?他们可以在任何时候改变email地址,但是要进行确认。

  <?php

    function user_change_email ($password1,$new_email,$user_name) {

     global $feedback,$hidden_hash_var;

     if (validate_email($new_email)) {

       $hash=md5($new_email.$hidden_hash_var);

       file://改变数据库中确认用的无序码值,但不改变email

       file://发出一个带有新认证码的确认email

       $user_name=strtolower($user_name);

       $password1=strtolower($password1);

       $sql="UPDATE user SET confirm_hash='$hash' WHERE user_name='$user_name' AND password='". md5($password1) ."'";

       $result=db_query($sql);

       if (!$result || db_affected_rows($result) < 1) {

        $feedback .= ' ERROR - Incorrect User Name Or Password ';

        return false;

        } else {

         $feedback .= ' Confirmation Sent ';

         user_send_confirm_email($new_email,$hash);

         return true;

         }

       } else {

         $feedback .= ' New Email Address Appears Invalid ';

         return false;

        }

       }

    function user_confirm($hash,$email) {

      /*

       用户点击认证email的相关连接时,连到一个确认的页面,该页面会调用这个函数,

      */

     global $feedback,$hidden_hash_var;

      file://verify that they didn't tamper with the email address

      $new_hash=md5($email.$hidden_hash_var);

      if ($new_hash && ($new_hash==$hash)) {

        file://在数据库中找出这个记录

        $sql="SELECT * FROM user WHERE confirm_hash='$hash'";

        $result=db_query($sql);

        if (!$result || db_numrows($result) < 1) {

          $feedback .= ' ERROR - Hash Not Found ';

          return false;

        } else {

          file://确认email,并且设置帐号为已经激活

          $feedback .= ' User Account Updated - You Are Now Logged In ';

          user_set_tokens(db_result($result,0,'user_name'));

          $sql="UPDATE user SET email='$email',is_confirmed='1' WHERE confirm_hash='$hash'";

          $result=db_query($sql);

          return true;

         }

        } else {

         $feedback .= ' HASH INVALID - UPDATE FAILED ';

         return false;

        }

       }

    function user_send_confirm_email($email,$hash) {

      /*

       这个函数在首次注册或者改变email地址时使用

      */

       $message = "Thank You For Registering at Company.com".

       "\nSimply follow this link to confirm your registration: ".
       "\n\nhttp://www.company.com/account/confirm.php?hash=$hash&email=". urlencode($email). "\n\nOnce you confirm, you can use the services on PHPBuilder.";
mail ($email,'Registration Confirmation',$message,'From: noreply@company.com');

      }

    ?>

  评论:或许我们在用户认证方面不是采用这种方法,而是采用session等方式,不过这篇文章在如何进行加密和确认方面,还是对我们有所启发的。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章