查看: 492|回复: 0

[.NET开发] 基于localStorge开发登录模块的记住密码与自动登录实例

发表于 2018-1-2 08:00:00

关于这个模块功能模块的由来,这是鸟大大的处女秀,为什么这么说呢?一天在群里,一个哥们说有私活,开发一个****模块,我那天手痒痒就和他聊了两句,然后,就决定给她做这个模块了,和他谈了谈交付时间,他说最迟两天,然后谈了谈加个,最后达成,500¥!!!这个模块其实第一天晚上我就开发出来了,那时我给他微信说,功能模块开发ok了,要不要远程查看一下,没问题的话就交了,一会他回我,好了就发过来,然后微信就转过来500¥,当时很诧异,毕竟是处女秀,然后就把项目交给他了,并且是完美交付,在客户那里,也没有出现问题!到如今想想,还激动啊!记录那个时刻--2016-3。

摘要:传动的记住密码与自动登录模块,都是基于cookie,但是cookie上做的话,有一些弊端,鸟看了就是cookie文件大小受限,所以本问叙述的是基于H5上的storge,本地持久化存储来做的自动登录和记住密码的,所以如果你不懂storge的话,建议先去充电!

充电:了解localstorge

备注:这是一个仿网页知乎的登录模块,如果想要完整源码,可以联系鸟哦

效果图:

核心源码分享:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <title>登录 - 仿知乎 - Thousands Find</title>
  6. <link rel="stylesheet" type="text/css" href="style/register-login.css" rel="external nofollow" >
  7. <script type="text/javascript" src="js/jquery.min.js"></script>
  8. <script>
  9. $(document).ready(function () {
  10. //读取 localStage 本地存储,填充用户名密码,如果自动登录有值直接跳转;
  11. //相反,跳转到本页面,等待登陆处理
  12. var storage = window.localStorage;
  13. var getEmail = storage["email"];
  14. var getPwd = storage["password"];
  15. var getisstroepwd = storage["isstorePwd"];
  16. var getisautologin = storage["isautologin"];
  17. if ("yes" == getisstroepwd) {
  18. if ("yes" == getisautologin) {
  19. if ((("" != getEmail) || (null != getEmail)) && (("" != getPwd) || (null != getPwd))) {
  20. //lacoste 已经保存 登陆信息 直接登陆
  21. //alert('正在自动登录');
  22. $("#email").val(getEmail);
  23. $("#password").val(getPwd);
  24. // window.location="";
  25. //加载时显示:正在自动登录
  26. $.ajax({
  27. url: 'LoginServlet.ashx',
  28. data: {
  29. email: getEmail,
  30. password: getPwd
  31. },
  32. dataType: 'json',
  33. success: function (data) {
  34. if (data.msg == "") {
  35. alert("账号信息异常,请核实后重新登录");
  36. } else {
  37. //alert(123);
  38. //登录成功后保存session,如果选择了记住密码,再保存到本地
  39. window.location.href ='Default2.aspx';
  40. }
  41. },
  42. error: function () {
  43. alert("系统错误");
  44. }
  45. });
  46. }
  47. }
  48. else {
  49. $("#email").val(getEmail);
  50. $("#password").val(getPwd);
  51. document.getElementById("isRemberPwdId").checked = true;
  52. }
  53. }
  54. });
  55. function login() {
  56. var userEmail = $("#email").val();
  57. var userPassWord = $("#password").val();
  58. if (userEmail != "" && userPassWord != "") {
  59. var storage = window.localStorage;
  60. //记住密码
  61. if (document.getElementById("isRemberPwdId").checked) {
  62. //存储到loaclStage
  63. //alert(134);
  64. storage["email"] = userEmail;
  65. storage["password"] = userPassWord;
  66. storage["isstorePwd"] = "yes";
  67. }
  68. else {
  69. storage["email"] = userEmail;
  70. storage["isstorePwd"] = "no";
  71. }
  72. //下次自动登录
  73. if (document.getElementById("isAutoLoginId").checked) {
  74. //存储到loaclStage
  75. storage["email"] = userEmail;
  76. storage["password"] = userPassWord;
  77. storage["isstorePwd"] = "yes";
  78. storage["isautologin"] = "yes";
  79. }
  80. else {
  81. storage["email"] = userEmail;
  82. storage["isautologin"] = "no";
  83. }
  84. $.ajax({
  85. url: 'LoginServlet.ashx',
  86. data: {
  87. "email": userEmail,
  88. "password": userPassWord
  89. },
  90. dataType: 'json',
  91. success: function (data) {
  92. if (data.msg == "") {
  93. alert("用户名或密码错误");
  94. } else {
  95. alert("登陆成功");
  96. //登录成功后保存session,如果选择了记住密码,再保存到本地
  97. window.location.href = 'Default.aspx';
  98. }
  99. },
  100. error: function () {
  101. alert("系统错误1");
  102. }
  103. });
  104. //alert("登录成功");
  105. }
  106. else {
  107. alert("用户名密码不能为空");
  108. }
  109. }
  110. </script>
  111. </head>
  112. <body>
  113. <div id="box"></div>
  114. <div class="cent-box">
  115. <div class="cent-box-header">
  116. <h1 class="main-title hide">仿知乎</h1>
  117. <h2 class="sub-title">生活热爱分享 - Thousands Find</h2>
  118. </div>
  119. <div class="cont-main clearfix">
  120. <div class="index-tab">
  121. <div class="index-slide-nav">
  122. <a href="login.html" rel="external nofollow" class="active">登录</a>
  123. <a href="register.html" rel="external nofollow" >注册</a>
  124. <div class="slide-bar"></div>
  125. </div>
  126. </div>
  127. <form id="loginform" name="loginform" autocomplete="on" method="post">
  128. <div class="login form">
  129. <div class="group">
  130. <div class="group-ipt email">
  131. <input type="email" name="email" id="email" class="ipt" placeholder="邮箱地址" required/>
  132. </div>
  133. <div class="group-ipt password">
  134. <input type="password" name="password" id="password" class="ipt" placeholder="输入您的登录密码" required/>
  135. </div>
  136. </div>
  137. </div>
  138. <div class="button">
  139. <button type="button" class="login-btn register-btn" id="button" onclick="login()">登录</button>
  140. </div>
  141. <div class="remember clearfix">
  142. <label for="loginkeeping" class="remember-me">
  143. <input type="checkbox" name="isRemberPwdId" id="isRemberPwdId" class="remember-mecheck" checked />
  144. 记住密码 ?
  145. </label>
  146. <label for="autologin" class="forgot-password">
  147. <input type="checkbox" name="isAutoLoginId" id="isAutoLoginId" class="remember-mecheck" checked />
  148. 自动登录
  149. </label>
  150. </div>
  151. </form>
  152. </div>
  153. </div>
  154. <div class="footer">
  155. <p>仿知乎 - Thousands Find</p>
  156. <p>copy@*.* 2016</p>
  157. </div>
  158. <script src='js/particles.js' type="text/javascript"></script>
  159. <script src='js/background.js' type="text/javascript"></script>
  160. <script src='js/jquery.min.js' type="text/javascript"></script>
  161. <script src='js/layer/layer.js' type="text/javascript"></script>
  162. <script src='js/index.js' type="text/javascript"></script>
  163. </body>
  164. </html>
复制代码

最后总结一下:

这个模块是通用的,我们要做的是:

1.当用户点击登录的时候,首先拿到表单里的数据
2.做出判断,判断用户是否勾选记住密码 或者 自动登录

3.都没勾选,对数据进行加密,发到服务器端做登录校验,之后返回

4.勾选了记住密码,就将用户名密码保存到storge,核心代码赞一下

  1. var storage = window.localStorage;
  2. //记住密码
  3. if (document.getElementById("isRemberPwdId").checked) {
  4. //存储到loaclStage
  5. //alert(134);
  6. storage["email"] = userEmail;
  7. storage["password"] = userPassWord;
  8. storage["isstorePwd"] = "yes";
  9. }
  10. else {
  11. storage["email"] = userEmail;
  12. storage["isstorePwd"] = "no";
  13. }
复制代码

记住,这时你已经勾选了记住密码,下次登录时,该如何操作?

在$(function (){})里,也就是浏览器渲染标签时,做出判断,看一下storge['isstorePwd']是否为yes,核心代码赞一赞

  1. $(document).ready(function () {
  2. //读取 localStage 本地存储,填充用户名密码,如果自动登录有值直接跳转;
  3. //相反,跳转到本页面,等待登陆处理
  4. var storage = window.localStorage;
  5. var getEmail = storage["email"];
  6. var getPwd = storage["password"];
  7. var getisstroepwd = storage["isstorePwd"];
  8. var getisautologin = storage["isautologin"];
  9. if ("yes" == getisstroepwd) {
  10. if ("yes" == getisautologin) {
  11. ....
  12. }
  13. }
  14. else {
  15. $("#email").val(getEmail);
  16. $("#password").val(getPwd);
  17. document.getElementById("isRemberPwdId").checked = true;
  18. }
  19. }
  20. });
复制代码

ok 如果记住密码就搞定了!

5.自动登录:这个功能还用我说吗?和记住密码类似!

  1. //下次自动登录
  2. if (document.getElementById("isAutoLoginId").checked) {
  3. //存储到loaclStage
  4. storage["email"] = userEmail;
  5. storage["password"] = userPassWord;//密码存到storage里
  6. storage["isstorePwd"] = "yes";
  7. storage["isautologin"] = "yes";
  8. }
  9. else {
  10. storage["email"] = userEmail;
  11. storage["isautologin"] = "no";
  12. }
复制代码

当用户再次登录的时候,还是在一加载的时候,做出判断,是否勾选自动登录,勾选的话,从storage里拿到数据,直接发生异步

请求,就不用用户做出点击登录事件了!

  1. if ("yes" == getisautologin) {
  2. if ((("" != getEmail) || (null != getEmail)) && (("" != getPwd) || (null != getPwd))) {
  3. //lacoste 已经保存 登陆信息 直接登陆
  4. //alert('正在自动登录');
  5. $("#email").val(getEmail);
  6. $("#password").val(getPwd);
  7. // window.location="";
  8. //加载时显示:正在自动登录
  9. $.ajax({
  10. url: 'LoginServlet.ashx',
  11. data: {
  12. email: getEmail,
  13. password: getPwd
  14. },
  15. dataType: 'json',
  16. success: function (data) {
  17. if (data.msg == "") {
  18. alert("账号信息异常,请核实后重新登录");
  19. } else {
  20. //alert(123);
  21. //登录成功后保存session,如果选择了记住密码,再保存到本地
  22. window.location.href ='Default2.aspx';
  23. }
  24. },
  25. error: function () {
  26. alert("系统错误");
  27. }
  28. });
复制代码

以上这篇基于localStorge开发登录模块的记住密码与自动登录实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持程序员之家。



回复

使用道具 举报