


Login, registration and password modification functions implemented in PHP
This article mainly introduces the login, registration and password modification functions implemented by PHP. It analyzes the related database operations, ajax interaction, data verification and verification code related operation skills of PHP to implement the login function in the form of examples. Friends who need it can Refer to the following
Here is an introduction to the interface layout and function implementation of registration, login, and password modification:
1. Login
2. Forgot password
3. Free registration
<p id="views" class="views"> <p id="view-login" class="page-view view-login active"> <present name="wxuser"> <p id="wxuser" class="form-group text-center"> <p> <img src="/static/imghwm/default1.png" data-src="{sh:$wxuser.headimgurl}" class="lazy" alt="Login, registration and password modification functions implemented in PHP" > </p> <h4 id="sh-wxuser-nickname">{sh:$wxuser.nickname}</h4> </p> </present> <!--登录--> <p id="login" class="step"> <h4 id="登录">登录</h4> <p class="go-forget">忘记密码</p> <form class="form-horizontal" role="form" type="get"> <p class="form-group"> <label>手机号码</label> <input type="tel" name="tel" class="form-item" id="tel_num" placeholder="请输入手机号码" value=""> </p> <p class="form-group"> <label>登录密码</label> <input type="password" name="password" class="form-item" placeholder="请填写密码"> </p> <p class="js-help-info error"></p> </form> <p class="popup-options"> <button type="button" class="btn btn-block btn-success js-login">确认</button> </p> <p class="go-register">免费注册</p> </p> <!--注册--> <p id="register" class="step" style="display:none;"> <h4 id="注册账号">注册账号</h4> <form role="form" class="form-horizontal"> <p class="form-group"> <label>手机号码</label> <input type="tel" name="tel" class="form-item" id="tel_num" placeholder="请输入手机号码" value=""> </p> <p class="form-group form-group-r"> <label>验证码</label> <button class="btn-sm btn-white js-sms-code" type="button">获取验证码</button> <input type="text" placeholder="请填写验证码" class="form-item" name="smscode" /> </p> <p class="form-group"> <label>登录密码</label> <input type="password" placeholder="设置登录密码" class="form-item" name="password" maxlength="30"> </p> <p class="form-group"> <label>确认密码</label> <input type="password" placeholder="确认登录密码" class="form-item" name="re_password" maxlength="30"> </p> <p class="js-help-info error"> </p> </form> <p class="popup-options"> <button type="button" class="btn btn-block btn-success js-register">确认</button> </p> <p class="go-login">立即登录</p> </p> <!--修改密码--> <p id="changePwd" class="step" style="display:none;"> <h4 id="修改密码">修改密码</h4> <form role="form" class="form-horizontal"> <p class="form-group"> <label>手机号码</label> <input type="tel" name="tel" class="form-item" id="tel_num" placeholder="请输入手机号码" value=""> </p> <p class="form-group form-group-r"> <label>验证码</label> <button class="btn-sm btn-white js-sms-excode" type="button">获取验证码</button> <input type="text" placeholder="请填写验证码" class="form-item" name="smscode" /> </p> <p class="form-group"> <label>新密码</label> <input type="password" placeholder="设置登录密码" class="form-item" name="password" maxlength="30"> </p> <p class="form-group"> <label>确认密码</label> <input type="password" placeholder="确认登录密码" class="form-item" name="re_password" maxlength="30"> </p> <p class="js-help-info error"> </p> </form> <p class="popup-options"> <button type="button" class="btn btn-block btn-success js-changePwd">确认</button> </p> <p class="go-login">立即登录</p> </p> </p> </p>js processing:
<script type="text/javascript"> var tel = ''; $(function() { var check = { checkPwd: function(password) { if (typeof password == 'undefined' || password == '') { return false; } return true; }, checkSmscode: function(code) { if (typeof code == 'undefined' || code == '') { return false; } return true; }, validTel: function(value) { return /^((\+86)|(86))?(1)\d{10}$/.test('' + value); } } //登录 $(".js-login").click(function() { var tel = $("#login").find("input[name='tel']").val(); if (!check.validTel(tel)) { $('.js-help-info').html('请输入正确的手机号'); //**提示下个页面还有 return false; } var password = $("#login").find("input[name='password']").val(); if (!check.checkPwd(password)) { $('.js-help-info').html('请输入密码'); return false; } $('.js-login').attr("disabled", "disabled"); $.ajax({ url: "{sh::U('Home/userLogin')}", type: 'POST', dataType: "json", data: { tel: tel, password: password }, success: function(response) { if (response.result) { location.href = response.href; } else { setTimeout(function() { $('.js-login').removeAttr("disabled"); }, 500); $('.js-help-info').html(response.error); } }, error: function() { $('.js-help-info').html("请求失败"); } }); }); //注册 $(".js-register").click(function() { var tel = $("#register").find("input[name='tel']").val(); if (!check.validTel(tel)) { $('.js-help-info').html('请输入正确的手机号'); //**提示下个页面还有 return false; } var password = $("#register input[name='password']").val(); var smscode = $("#register input[name='smscode']").val(); var re_password = $("#register input[name='re_password']").val(); if (!check.checkSmscode(smscode)) { $('.js-help-info').html('请输入验证码'); return false; } if (!check.checkPwd(password)) { $('.js-help-info').html('请输入登录密码'); return false; } if (!check.checkPwd(re_password)) { $('.js-help-info').html('请输入确认密码'); return false; } else if (password != re_password) { $('.js-help-info').html('两次输入的密码不一致'); return false; } $('.js-login').attr("disabled", "disabled"); $.ajax({ url: "{sh::U('Home/userRegister')}", type: 'POST', dataType: "json", data: { tel: tel, password: password, smscode: smscode }, success: function(response) { if (response.result) { location.href = response.href; } else { setTimeout(function() { $('.js-login').removeAttr("disabled"); }, 500); $('.js-help-info').html(response.error); } }, error: function() { $('.js-help-info').html("请求失败"); } }); }); //发送验证码 $('.js-sms-code').click(function() { var tel = $('#register #tel_num').val(); if (!check.validTel(tel)) { $('.js-help-info').html('请输入正确的手机号'); //**提示下个页面还有 return false; } // 检测是否已经注册 $.ajax({ url: "{sh::U('Home/checkTel')}", type: 'POST', dataType: "json", async: false, data: { tel: tel }, success: function(json) { checkRes = json.status; }, error: function(json) { $('.js-help-info').html("发送失败"); } }); if (checkRes == 1) { $('.js-help-info').html("已是注册用户");return false; } if (checkRes == 3) { $('.js-help-info').html("错误的请求");return false; } $(this).attr("disabled", "disabled").html("<span style='color:#666'><span id='countdown'>60</span>s 后再试</span>"); countdown(); $.ajax({ url: "{sh::U('Home/sendSmscode')}", type: 'POST', dataType: "json", data: { tel: tel }, success: function() {}, error: function() { $('.js-help-info').html("发送失败"); } }); }); //修改密码 $('.go-forget').click(function() { var tel = $('#login #tel_num').val(); $("#login").hide(); $("#register").hide(); $("#changePwd").show(); $("#changePwd #tel_num").val(tel).focus(); $('.js-help-info').html(''); }); //免费注册 $('.go-register').click(function() { var tel = $('#login #tel_num').val(); $("#login").hide(); $("#changePwd").hide(); $("#register").show(); $("#register #tel_num").val(tel).focus(); $('.js-help-info').html(''); }); //立即登录 $('#changePwd .go-login').click(function() { var tel = $('#changePwd #tel_num').val(); $("#register").hide(); $("#changePwd").hide(); $("#login").show(); $("#login #tel_num").val(tel).focus(); $('.js-help-info').html(''); }); //立即登录 $('#register .go-login').click(function() { var tel = $('#register #tel_num').val(); $("#register").hide(); $("#changePwd").hide(); $("#login").show(); $("#login #tel_num").val(tel).focus(); $('.js-help-info').html(''); }); $('.js-changePwd').click(function() { var tel = $("#changePwd").find("input[name='tel']").val(); if (!check.validTel(tel)) { $('.js-help-info').html('请输入正确的手机号'); //**提示下个页面还有 return false; } var password = $("#changePwd input[name='password']").val(); var smscode = $("#changePwd input[name='smscode']").val(); var re_password = $("#changePwd input[name='re_password']").val(); if (!check.checkSmscode(smscode)) { $('#changePwd .js-help-info').html('请输入验证码'); return false; } if (!check.checkPwd(password)) { $('#changePwd .js-help-info').html('请输入新密码'); return false; } if (!check.checkPwd(re_password)) { $('#changePwd .js-help-info').html('请输入确认密码'); return false; } else if (password != re_password) { $('#changePwd .js-help-info').html('两次输入的密码不一致'); return false; } $.ajax({ url: "{sh::U('Home/changePwd')}", type: "POST", dataType: "json", data: { tel: tel, password: password, smscode: smscode }, success: function(response) { if (response.result) { location.href = response.href; } else { setTimeout(function() { $('.js-login').removeAttr("disabled"); }, 500); $('.js-help-info').html(response.error); } }, error: function() { $('.js-help-info').html("请求失败"); } }); }); //发送短信修改密码 $('.js-sms-excode').click(function() { var tel = $('#changePwd #tel_num').val(); if (!check.validTel(tel)) { $('.js-help-info').html('请输入正确的手机号'); //**提示下个页面还有 return false; } // 检测是否已经注册 $.ajax({ url: "{sh::U('Home/checkTel')}", type: 'POST', dataType: "json", async: false, data: { tel: tel }, success: function(json) { checkRes = json.status; }, error: function(json) { $('.js-help-info').html("发送失败"); } }); if (checkRes == 2) { $('.js-help-info').html("号码尚未注册");return false; } if (checkRes == 3) { $('.js-help-info').html("错误的请求");return false; } $(this).attr("disabled", "disabled").html("<span style='color:#666'><span id='countdown'>60</span>s 后再试</span>"); countdown(); $.ajax({ url: "{sh::U('Home/sendSmsexcode')}", type: 'POST', dataType: "json", data: { tel: tel }, success: function(data) {}, error: function() { $('.js-help-info').html("请求失败"); } }); }); }); function countdown() { // 递归 验证码倒计时 setTimeout(function() { var time = $("#countdown").text(); if (time == 1) { $('.js-sms-code').removeAttr("disabled"); $('.js-sms-code').html("发送验证码"); $('.js-sms-excode').removeAttr("disabled"); $('.js-sms-excode').html("发送验证码"); } else { $("#countdown").text(time - 1); countdown(); } }, 1000); } </script>php background processing:
//用户登录 public function userLogin() { if(IS_AJAX && !$this->member) { $tel = $this->_post('tel', 'trim'); $password = $this->_post('password', 'trim,md5'); $member = M('Member')->where(array('tel' => $tel))->find(); if ($member && $member['password'] === $password) { //检测是否存在微信用户需要绑定 if ($member['wxuser_id'] == 0 && $this->wxuser) { M('Member')->where(array('id' => $member['id']))->save(array('wxuser_id' => $this->wxuser_id)); } $href = session(LASTREQUEST); session(MEMBER, $member['id']); session(LASTREQUEST, null); $this->ajaxReturn(array('result' => true, 'href' => $href ? $href : U('Member/index'))); } else { if (empty($member)) { $this->ajaxReturn(array('result' => false, 'error' => '手机号尚未注册.')); } else { $this->ajaxReturn(array('result' => false, 'error' => '密码不正确.')); } } } else { $this->ajaxReturn(array('result' => false, 'error' => '非法请求.')); } } // 用户退出 public function userLogout() { session(WXUSER, null); session(MEMBER, null); $this->success('退出成功',U('Store/Member/index')); } // 用户注册 public function userRegister() { $tel = $this->_post('tel', 'trim'); $password = $this->_post('password', 'trim,md5'); $smscode = $this->_post('smscode', 'trim'); $session_smscode = session($this->smscode); $user_exit = M('Member')->where(array('tel' => $tel))->find(); if (!preg_match("/1[3458]{1}\d{9}$/", $tel) && $user_exit) { $this->ajaxReturn(array('result' => false, 'error' => '手机号不合法')); } $memberModel = M('Member'); // 检测是否已注册 $member = $memberModel-> where(array('tel' =>$tel,'status'=>1))->find(); if (!empty($member)) { $this->ajaxReturn(array('result' => false, 'error' => '已是注册用户')); } if (time() > $session_smscode['time'] || $smscode != $session_smscode['code']) { $this->ajaxReturn(array('result' => false, 'error' => '验证码不正确')); //--调试,先把验证功能关闭 } $data = array('tel' => $tel, 'password' => $password, 'wxuser_id' => intval($this->wxuser_id), 'addtime' => time()); $insert_id = $memberModel->add($data); if ($insert_id) { $href = session(LASTREQUEST); session(MEMBER, $insert_id); //*****只是一个id值 $this->ajaxReturn(array('result' => true, 'href' => $href ? $href : U('Member/index'))); } else { $this->ajaxReturn(array('result' => false, 'error' => '操作失败', 'msg' => M('Member')->getError())); } } //用户更改密码 public function changePwd(){ $tel = $this->_post('tel','trim'); $password = $this ->_post('password','trim'); $smscode = $this ->_post('smscode','trim'); $session_smscode = session($this ->smscode); if (time() > $session_smscode['time'] || $smscode != $session_smscode['code']) { $this->ajaxReturn(array('result' => false, 'error' => '验证码不正确')); //--调试成功 } $data = array('password' => md5($password), 'addtime' => time()); $memberModel = M('Member'); // 检测是否已注册 $member = $memberModel-> where(array('tel' =>$tel,'status'=>1))->find(); if (empty($member)) { $this->ajaxReturn(array('result' => false, 'error' => '号码尚未注册')); } if ($memberModel->where(array('tel'=> $tel))->save($data)) { $href = session(LASTREQUEST); session(MEMBER, $member['id']); $this->ajaxReturn(array('result' => true, 'href' => $href ? $href : U('Member/index'))); } else { $this->ajaxReturn(array('result' => false, 'error' => '操作失败', 'msg' => M('Member')->getError())); } } // ajax检测号码是否注册 public function checkTel() { $tel = $this->_post('tel', 'trim'); if (IS_AJAX && preg_match("/1[3458]{1}\d{9}$/",$tel)) { $memberModel = M('Member'); $member = $memberModel->where(array('tel'=>$tel,'status'=>1))->find(); if (!empty($member)) { $this->ajaxReturn(array('status' => 1, 'info' => '已注册')); } else { $this->ajaxReturn(array('status' => 2, 'info' => '未注册')); } } else { $this->ajaxReturn(array('status' => 3, 'info' => '错误的请求')); } } //发送注册验证码 public function sendSmscode() { session($this->smstime, null); $smstime = session($this->smstime); $tel = $this->_post('tel', 'trim'); if (IS_AJAX && (!$smstime || time() > $smstime) && preg_match("/1[3458]{1}\d{9}$/",$tel)) { $smscode = rand(1000, 9999); //发送验证码 require LIB_PATH . 'ORG/Taobao-sdk-php/TopSdk.php'; $c = new TopClient; $c->appkey = '23307560'; // 原23294081 $c->secretKey = '21ef24dd4c51e20693c5db0983c433e7'; // 原0402169f466d8fed780e7f07edd25177 $req = new AlibabaAliqinFcSmsNumSendRequest; $req->setSmsType("normal"); $req->setSmsFreeSignName("注册验证"); $req->setSmsParam('{"code":"'. $smscode .'","product":"【多多助店宝】"}'); $req->setRecNum("{$tel}"); $req->setSmsTemplateCode("SMS_5056863"); $resp = $c->execute($req); if(!$resp->code) { //设置发送限制时间 session($this->smstime, time() + 50); //设置验证码5分钟内有效 session($this->smscode, array('code' => $smscode, 'time' => time() + 600)); } else { //发送失败写入日志文件 $log = date('Y-m-d H:i:s') . " 发送失败 sub_code:{$resp->sub_code} sub_msg:{$resp->sub_msg}" . PHP_EOL; file_put_contents(RUNTIME_PATH . 'Log/smscode.log', $log, FILE_APPEND); } $this->ajaxReturn(array('result' => !$resp->code)); } else { $this->ajaxReturn(array('result' => false, 'error' => '错误的请求')); } } //发送修改密码验证码 public function sendSmsexcode(){ session($this->smstime, null); $smstime = session($this->smstime); $tel = $this->_post('tel', 'trim'); if (IS_AJAX && (!$smstime || time() > $smstime) && preg_match("/1[3458]{1}\d{9}$/",$tel)) { $smscode = rand(1000, 9999); //发送验证码 require LIB_PATH . 'ORG/Taobao-sdk-php/TopSdk.php'; $c = new TopClient; $c->appkey = '23307560'; // 原23294081 $c->secretKey = '21ef24dd4c51e20693c5db0983c433e7'; // 原0402169f466d8fed780e7f07edd25177 $req = new AlibabaAliqinFcSmsNumSendRequest; $req->setSmsType("normal"); $req->setSmsFreeSignName("变更验证"); //短信签名固定,不可以换其他字 $req->setSmsParam('{"code":"'. $smscode .'","product":"【多多助店宝】"}'); $req->setRecNum("{$tel}"); $req->setSmsTemplateCode("SMS_5056861"); $resp = $c->execute($req); if(!$resp->code) { //设置发送限制时间 session($this->smstime, time() + 50); //设置验证码5分钟内有效 session($this->smscode, array('code' => $smscode, 'time' => time() + 600)); } else { //发送失败写入日志文件 $log = date('Y-m-d H:i:s') . " 发送失败 sub_code:{$resp->sub_code} sub_msg:{$resp->sub_msg}" . PHP_EOL; file_put_contents(RUNTIME_PATH . 'Log/smscode.log', $log, FILE_APPEND); } $this->ajaxReturn(array('result' => !$resp->code)); } else { $this->ajaxReturn(array('result' => false, 'error' => '错误的请求')); } }
Summary:
1. SMS verification is used to register and change passwords.2. For security reasons, front-end ajax verification. The backend also performs validation.
3. The process is reasonable and can be switched freely.
4. Comprehensive functions, including login, registration, and password modification.
PHP implementation of obtaining the values of text boxes, password fields, and buttons
PHP method to implement addition and subtraction operations for dates, months, days, weeks, hours, minutes, seconds, etc.
phpDetailed explanation of random string generation method
The above is the detailed content of Login, registration and password modification functions implemented in PHP. For more information, please follow other related articles on the PHP Chinese website!

TomodifydatainaPHPsession,startthesessionwithsession_start(),thenuse$_SESSIONtoset,modify,orremovevariables.1)Startthesession.2)Setormodifysessionvariablesusing$_SESSION.3)Removevariableswithunset().4)Clearallvariableswithsession_unset().5)Destroythe

Arrays can be stored in PHP sessions. 1. Start the session and use session_start(). 2. Create an array and store it in $_SESSION. 3. Retrieve the array through $_SESSION. 4. Optimize session data to improve performance.

PHP session garbage collection is triggered through a probability mechanism to clean up expired session data. 1) Set the trigger probability and session life cycle in the configuration file; 2) You can use cron tasks to optimize high-load applications; 3) You need to balance the garbage collection frequency and performance to avoid data loss.

Tracking user session activities in PHP is implemented through session management. 1) Use session_start() to start the session. 2) Store and access data through the $_SESSION array. 3) Call session_destroy() to end the session. Session tracking is used for user behavior analysis, security monitoring, and performance optimization.

Using databases to store PHP session data can improve performance and scalability. 1) Configure MySQL to store session data: Set up the session processor in php.ini or PHP code. 2) Implement custom session processor: define open, close, read, write and other functions to interact with the database. 3) Optimization and best practices: Use indexing, caching, data compression and distributed storage to improve performance.

PHPsessionstrackuserdataacrossmultiplepagerequestsusingauniqueIDstoredinacookie.Here'showtomanagethemeffectively:1)Startasessionwithsession_start()andstoredatain$_SESSION.2)RegeneratethesessionIDafterloginwithsession_regenerate_id(true)topreventsessi

In PHP, iterating through session data can be achieved through the following steps: 1. Start the session using session_start(). 2. Iterate through foreach loop through all key-value pairs in the $_SESSION array. 3. When processing complex data structures, use is_array() or is_object() functions and use print_r() to output detailed information. 4. When optimizing traversal, paging can be used to avoid processing large amounts of data at one time. This will help you manage and use PHP session data more efficiently in your actual project.

The session realizes user authentication through the server-side state management mechanism. 1) Session creation and generation of unique IDs, 2) IDs are passed through cookies, 3) Server stores and accesses session data through IDs, 4) User authentication and status management are realized, improving application security and user experience.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function
