用户体验之 登陆

Ajax登录设计

任务需求:做一个登录,拥有自动记住账号和密码的功能,要保证安全性,ajax,无刷新,良好的用户体验.(母板页)

这是前台页面,要求实现用户登录

clip_image002

首先我们分析,

用户需求:

1. 登录以后,登录框隐藏,并且欢迎登录的框显示,并且,左上角登录的按钮消失,安全退出显示.

2. 如果选择记住帐号和密码,下次登录直接登录,并且保证安全性.

实现过程:

首先,登录的时候发出ajax请求,用户验证登录,登录以后,保存当前用户名和密码到cookies中,注意,密码要用md5加密,md5是根据用户的机器配置生成的,并且返回登录状态和用户名的json数据

第二次登录的时候,检测用户状态,如果用户cookies保存的用户名和密码,根据用户名读取用户密码,并进行md5加密,检验两次密码是否相同,如果相同就返回json数据,登录状态true和用户名,如果cookies中只有用户名,那么返回登录状态为false和用户名

前台主要代码:

   1:  <%@ Master Language="C#" AutoEventWireup="true" CodeFile="Left_Top_Dwon.master.cs" 
   2:      Inherits="Left_Top_Dwon" %>
   3:   
   4:  "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
   5:  "http://www.w3.org/1999/xhtml"> 
   6:  "Head1" runat="server"> 
   7:      "Content-Type" content="text/html; charset=utf-8" /> 
   8:      无标题文档 
   9:      "css/top_foot.css" rel="stylesheet" type="text/css" /> 
  10:      "css/style.css" rel="stylesheet" type="text/css" />
  11:   
  12:      
  13:   
  14:      
  15:   
  16:      
  17:   
  18:      
 135:   
 136:      "head" runat="server"> 
 137:       
 138:   
 139:   
 140:      class="sheel"> 
 141:          class="header"> 
 142:              class="top_side"> 
 143:                  
 144:                      
  • "liLogin">"#">登录 |
  •  145:                      
  • "#">注册
  •  146:                      
  • |"#">个人信息
  •  147:                      
  • |"#">我的收藏夹
  •  148:                      
  • |"#">我的留言
  •  149:                      
  • |"#">总站留言
  •  150:                      
  • "liLogout">|"A2" href='<%=ResolveUrl("Member/Data/GetMemberInfo.ashx?method=MemberLogout")%>'>安全退出
  •  151:                   
     152:               
     153:              class="nav"> 
     154:                  
      "sddm">
     155:                      
  • "#">首  页
  •  156:                      
  • "#">工艺概况
  •  157:                      
  • "#" οnmοuseοver="mopen('m1')" οnmοuseοut="mclosetime()">工艺知识
  •  158:                          "m1" οnmοuseοver="mcancelclosetime()" οnmοuseοut="mclosetime()"> 
     159:                              "#">大吴泥塑 "#">金漆木雕 "#">潮州刺绣 "#">潮州陶瓷 
     160:                           
     161:                       
     162:                      
  • "#">作品展览
  •  163:                      
  • "#">非遗作品
  •  164:                      
  • "#" οnmοuseοver="mopen('m2')" οnmοuseοut="mclosetime()">新闻中心
  •  165:                          "m2" οnmοuseοver="mcancelclosetime()" οnmοuseοut="mclosetime()"> 
     166:                              "#">大吴泥塑 "#">金漆木雕 "#">潮州刺绣 "#">潮州陶瓷 
     167:                           
     168:                       
     169:                      
  • "#">大师风采
  •  170:                      
  • "#">企业展示
  •  171:                      
  • "#">联系我们
  •  172:                   
     173:               
     174:           
     175:          class="content"> 
     176:              class="left_side"> 
     177:                  
    "fLogin">
     178:                  class="logo_bottom"> 
     179:                   
     180:                  class="login"> 
     181:                      

     182:                          用户登录 
     183:                      class="lg_table" id="divNotLogin"> 
     184:                          class="table1" width="198" cellpadding="0" cellspacing="0" border="0"> 
     185:                              
     186:                                  
     189:                                  
     192:                                  
     196:                              
     197:                              
     198:                                  
     201:                                  
     204:                              
     205:                          
    "40" align="right">
     187:                                      用户名 
     188:                                  
    "108" align="center">
     190:                                      "text" id="txtUserName" name="txtUserName" /> 
     191:                                  
    "50" rowspan="2">
     193:                                      "#" id="aLogin"> 
     194:                                          '<%=ResolveUrl("images/login.png")%>' alt="登录" /> 
     195:                                  
    "right">
     199:                                      密码 
     200:                                  
    "center">
     202:                                      "password" name="txtPwd" id="txtPwd" /> 
     203:                                  
     206:                          class="border"> 
     207:                           
     208:                          class="table2" width="190" cellpadding="0" cellspacing="0" border="0"> 
     209:                              
     210:                                  
     214:                                  
     218:                              
     219:                              
     220:                                  
     223:                                  
     226:                              
     227:                          
    "90">
     211:                                      "#"> 
     212:                                          '<%=ResolveUrl("images/lg_forget.png")%>' alt="忘记密码" /> 
     213:                                  
    "100">
     215:                                      "#"> 
     216:                                          '<%=ResolveUrl("images/zhuce.png")%>' alt="注册" /> 
     217:                                  
     221:                                      "checkbox" name="cbUserName" id="cbUserName" />记住用户名 
     222:                                  
     224:                                      "checkbox" name="cbPwd" id="cbPwd" />记住密码 
     225:                                  
     228:                       
     229:                      class="lg_table" id="divIsLogin"> 
     230:                          "tbIsLogin"class="table1" width="198" cellpadding="0" cellspacing="0"
     231:                              border="0"> 
     232:                              
     233:                                  
     237:                              
     238:                              
     239:                                  
     242:                              
     243:                          
    class="style1" style="height: 90px">
     234:                                      "color: Red">欢迎您回来!
     235:                                              尊敬的的"color: Red">用户!  
     236:                                  
    "center" class="style2">
     240:                                      "###">查看个人信息  | "A1" href='<%=ResolveUrl("Member/Data/GetMemberInfo.ashx?method=MemberLogout")%>'>退出 
     241:                                  
     244:                       
     245:                   
     246:                   
     247:                  class="enter enter1"> 
     248:                      "#"> 
     249:                          '<%=ResolveUrl("images/master.png")%>' alt="大师入口" title="大师入口" /> 
     250:                  class="enter enter2"> 
     251:                      "#"> 
     252:                          '<%=ResolveUrl("images/company.png")%>' alt="企业入口" title="企业入口" /> 
     253:                  class="paihang"> 
     254:                      

     255:                          

    class="hide">

     256:                              推荐排行榜

     257:                          

     258:                              "#">更多

     259:                       
     260:                      
      class="ph_ul" id="ph1">
     261:                          
  • "#" οnmοuseοver="setph(0);" class="ph_hover">大师推荐
  •  262:                          
  • "#" οnmοuseοver="setph(1);">工艺品推荐
  •  263:                          
  • "#" οnmοuseοver="setph(2);">企业推荐
  •  264:                       
     265:                      class="ph_p" id="ph2"> 
     266:                          
      "display: block;">
     267:                              
  • class="ph_li1">"#" class="phplihover">周少君
  •  268:                              
  • class="ph_li2">"#">周少君
  •  269:                              
  • class="ph_li3">"#">周少君
  •  270:                              
  • class="ph_li4">"#">周少君
  •  271:                              
  • class="ph_li5">"#">周少君
  •  272:                           
     273:                          
     274:                              
  • class="ph_li1">"#" class="phplihover">大大个
  •  275:                              
  • class="ph_li2">"#">大大个
  •  276:                              
  • class="ph_li3">"#">大大个
  •  277:                              
  • class="ph_li4">"#">大大个
  •  278:                              
  • class="ph_li5">"#">大大个
  •  279:                           
     280:                          
     281:                              
  • class="ph_li1">"#" class="phplihover">小小粒
  •  282:                              
  • class="ph_li2">"#">小小粒
  •  283:                              
  • class="ph_li3">"#">小小粒
  •  284:                              
  • class="ph_li4">"#">小小粒
  •  285:                              
  • class="ph_li5">"#">小小粒
  •  286:                           
     287:                       
     288:                   
     289:                  class="question"> 
     290:                      

     291:                          

    class="hide">

     292:                              参与调查

     293:                       
     294:                      "200"> 
     295:                          
     296:                              
     299:                          
     300:                          
     301:                              
     304:                              
     307:                          
     308:                          
     309:                              
     312:                              
     315:                          
     316:                          
     317:                              
     321:                              
     325:                          
     326:                      
    "2">
     297:                                  Q.您最喜欢以下哪种工艺品? 
     298:                              
     302:                                  "radio" />泥塑 
     303:                              
     305:                                  "radio" />木雕 
     306:                              
     310:                                  "radio" />陶瓷 
     311:                              
     313:                                  "radio" />石雕 
     314:                              
     318:                                  "#"> 
     319:                                      '<%=ResolveUrl("images/sumbit.gif")%>' alt="提交" /> 
     320:                              
     322:                                  "#"> 
     323:                                      '<%=ResolveUrl("images/see.gif")%>' alt="查看结果" /> 
     324:                              
     327:                   
     328:                  class="search"> 
     329:                      class="search_thing"> 
     330:                          "225"> 
     331:                              
     332:                                  
     339:                                  
     342:                              
     343:                              
     344:                                  
     348:                              
     349:                              
     350:                                  
     353:                              
     354:                          
    "25">
     333:                                       
     338:                                  
    "25">
     340:                                      "text" value="" /> 
     341:                                  
    "2">
     345:                                      "#"> 
     346:                                          '<%=ResolveUrl("images/search.png")%>' alt="搜索" /> 
     347:                                  
    "2" class="high_search">
     351:                                      "search.html">前往高级搜索>> 
     352:                                  
     355:                       
     356:                   
     357:               
     358:              class="right_side"> 
     359:                  "ContentPlaceHolder1" runat="server"> 
     360:                   
     361:               
     362:              class="footer"> 
     363:                  class="s_nav"> 
     364:                      
     365:                          
  • "#">在线留言|
  •  366:                          
  • "#">联系我们|
  •  367:                          
  • "#">关于我们|
  •  368:                          
  • "#">企业信息|
  •  369:                          
  • "#">招商合作
  •  370:                       
     371:                   
     372:                  class="foot"> 
     373:                      

     374:                          广东省潮州 2011 © All RIGHTS RESERVED. [版权所有] 学生创新活动中心 
     375:                      

     376:                      

     377:                          制作与维护:计算机工程研发实验室联系QQ群:73983871

     378:                   
     379:               
     380:           
     381:       
     382:   
     383:   
     384:   

    接下来,后台相应请求:

       1:  <%@ WebHandler Language="C#" Class="GetMemberInfo" %>
       2:   
       3:  using System;
       4:   
       5:  using System.Web;
       6:   
       7:  using Common;
       8:   
       9:  using czcraft.Model;
      10:   
      11:  using czcraft.BLL;
      12:   
      13:  using System.Web.SessionState;
      14:   
      15:  public class GetMemberInfo : IHttpHandler, IRequiresSessionState
      16:   
      17:  {
      18:   
      19:  // //记录日志
      20:   
      21:  private static readonly log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
      22:   
      23:  public void ProcessRequest(HttpContext context)
      24:   
      25:  {
      26:   
      27:  String methodName = context.Request["method"];
      28:   
      29:  if (!string.IsNullOrEmpty(methodName))
      30:   
      31:  CallMethod(methodName, context);
      32:   
      33:  }
      34:   
      35:  /// 
      36:   
      37:  /// 根据业务需求调用不同的方法
      38:   
      39:  /// 
      40:   
      41:  /// 方法
      42:   
      43:  /// 上下文
      44:   
      45:  public void CallMethod(string Method, HttpContext context)
      46:   
      47:  {
      48:   
      49:  switch (Method)
      50:   
      51:  {
      52:   
      53:  case "CheckExistUserName":
      54:   
      55:  CheckExistUserName(context);
      56:   
      57:  break;
      58:   
      59:  case "MemberLogin":
      60:   
      61:  MemberLogin(context);
      62:   
      63:  break;
      64:   
      65:  case "SaveMemberInfo":
      66:   
      67:  SaveMemberInfo(context);
      68:   
      69:  break;
      70:   
      71:  case "CheckLoginStatus":
      72:   
      73:  CheckLoginStatus(context);
      74:   
      75:  break;
      76:   
      77:  case "MemberLogout":
      78:   
      79:  MemberLogout(context);
      80:   
      81:  break;
      82:   
      83:  default:
      84:   
      85:  return;
      86:   
      87:  }
      88:   
      89:  }
      90:   
      91:  /// 
      92:   
      93:  /// 退出
      94:   
      95:  /// 
      96:   
      97:  /// 
      98:   
      99:  public void MemberLogout(HttpContext context)
     100:   
     101:  {
     102:   
     103:  string UserName = (string)context.Session["UserName"];
     104:   
     105:  memberBLL bll = new memberBLL();
     106:   
     107:  if (!Tools.IsNullOrEmpty(UserName))
     108:   
     109:  {
     110:   
     111:  //如果session存在,清除session
     112:   
     113:  context.Session.Remove("UserName");
     114:   
     115:  }
     116:   
     117:  //清除cookies
     118:   
     119:  CookieHelper.ClearCookie("UserName");
     120:   
     121:  CookieHelper.ClearCookie("Pwd");
     122:   
     123:  //页面跳转
     124:   
     125:  JScript.AlertAndRedirect("安全退出成功!欢迎下次前来访问!", "http://www.cnblogs.com/Default.aspx");
     126:   
     127:  }
     128:   
     129:  /// 
     130:   
     131:  /// 检查用户登录状态
     132:   
     133:  /// 
     134:   
     135:  /// 
     136:   
     137:  public void CheckLoginStatus(HttpContext context)
     138:   
     139:  {
     140:   
     141:  string UserName = (string)context.Session["UserName"];
     142:   
     143:  memberBLL bll = new memberBLL();
     144:   
     145:  if (!Tools.IsNullOrEmpty(UserName))
     146:   
     147:  {
     148:   
     149:  //如果session存在,直接返回用户状态
     150:   
     151:  bll.WriteJsonForLogin(true, UserName);
     152:   
     153:  }
     154:   
     155:  else
     156:   
     157:  {
     158:   
     159:  //用户自动登录状态检测
     160:   
     161:  context.Response.Write(bll.CheckLoginStatus());
     162:   
     163:  }
     164:   
     165:  }
     166:   
     167:  /// 
     168:   
     169:  /// 会员登录
     170:   
     171:  /// 
     172:   
     173:  /// 
     174:   
     175:  public void MemberLogin(HttpContext context)
     176:   
     177:  {
     178:   
     179:  try
     180:   
     181:  {
     182:   
     183:  //获取数据
     184:   
     185:  string Name = context.Request["Name"];
     186:   
     187:  string Pwd = context.Request["Pwd"];
     188:   
     189:  string IsSaveName = context.Request["cbName"];
     190:   
     191:  string IsSavePwd = context.Request["cbPwd"];
     192:   
     193:  //用户登录状态
     194:   
     195:  bool Status = false;
     196:   
     197:  //返回给客户端的json数据
     198:   
     199:  string ReturnJson = "";
     200:   
     201:  //sql注入检测
     202:   
     203:  if (Tools.IsValidInput(ref Name, true) && (Tools.IsValidInput(ref Pwd, true)) && (Tools.IsValidInput(ref IsSaveName, true)) && (Tools.IsValidInput(ref IsSavePwd, true)))
     204:   
     205:  {
     206:   
     207:  member info = new member();
     208:   
     209:  memberBLL bll = new memberBLL();
     210:   
     211:  info.username = Name;
     212:   
     213:  info.password = Pwd;
     214:   
     215:  ReturnJson = bll.ReturnJson(info, out Status);
     216:   
     217:  if (Status) //如果成功登陆
     218:   
     219:  {
     220:   
     221:  //记住帐号和密码
     222:   
     223:  bll.RememberUserInfo(info, bll.GetRememberType(IsSaveName, IsSavePwd));
     224:   
     225:  //保存登录状态
     226:   
     227:  context.Session["UserName"] = info.username;
     228:   
     229:  }
     230:   
     231:  context.Response.Write(ReturnJson);
     232:   
     233:  }
     234:   
     235:  }
     236:   
     237:  catch (Exception ex)
     238:   
     239:  {
     240:   
     241:  logger.Error("会员登录出错!", ex);
     242:   
     243:  }
     244:   
     245:  }
     246:   
     247:  /// 
     248:   
     249:  /// 验证帐号是否存在
     250:   
     251:  /// 
     252:   
     253:  /// 
     254:   
     255:  public void CheckExistUserName(HttpContext context)
     256:   
     257:  {
     258:   
     259:  string username = context.Request["username"];
     260:   
     261:  if (Tools.IsValidInput(ref username, true))
     262:   
     263:  {
     264:   
     265:  context.Response.Write(new memberBLL().CheckExistUserName(username));
     266:   
     267:  }
     268:   
     269:  }
     270:   
     271:  /// 
     272:   
     273:  /// 保存用户信息
     274:   
     275:  /// 
     276:   
     277:  /// 
     278:   
     279:  public void SaveMemberInfo(HttpContext context)
     280:   
     281:  {
     282:   
     283:  try
     284:   
     285:  {
     286:   
     287:  //表单读取
     288:   
     289:  string txtUserName = context.Request["txtUserName"];
     290:   
     291:  string txtPwd = context.Request["txtPwd"];
     292:   
     293:  string txtEmail = context.Request["txtEmail"];
     294:   
     295:  string txtCheckCode = context.Request["txtCheckCode"];
     296:   
     297:  //验证码校验
     298:   
     299:  if (!txtCheckCode.Equals(context.Session["checkcode"].ToString()))
     300:   
     301:  {
     302:   
     303:  return;
     304:   
     305:  }
     306:   
     307:  //字符串sql注入检测
     308:   
     309:  if (Tools.IsValidInput(ref txtUserName, true) && Tools.IsValidInput(ref txtPwd, true) && Tools.IsValidInput(ref txtEmail, true))
     310:   
     311:  {
     312:   
     313:  member info = new member();
     314:   
     315:  info.username = txtUserName;
     316:   
     317:  info.password = txtPwd;
     318:   
     319:  info.Email = txtEmail;
     320:   
     321:  info.states = "0";
     322:   
     323:  if (new memberBLL().AddNew(info) > 0)
     324:   
     325:  {
     326:   
     327:  SMTP smtp = new SMTP(info.Email);
     328:   
     329:  string webpath = context.Request.Url.Scheme + "://" + context.Request.Url.Authority + "/Default.aspx";
     330:   
     331:  smtp.Activation(webpath, info.username);//发送激活邮件
     332:   
     333:  JScript.AlertAndRedirect("注册用户成功!!", "../Default.aspx");
     334:   
     335:  }
     336:   
     337:  else
     338:   
     339:  {
     340:   
     341:  JScript.AlertAndRedirect("注册用户失败!", "../Default.aspx");
     342:   
     343:  }
     344:   
     345:  }
     346:   
     347:  }
     348:   
     349:  catch (Exception ex)
     350:   
     351:  {
     352:   
     353:  logger.Error("错误!", ex);
     354:   
     355:  }
     356:   
     357:  }
     358:   
     359:  public bool IsReusable
     360:   
     361:  {
     362:   
     363:  get
     364:   
     365:  {
     366:   
     367:  return false;
     368:   
     369:  }
     370:   
     371:  }
     372:   
     373:  }
     374:   

    业务逻辑BLL部分代码:

       1:  /// 
       2:   
       3:  /// 用户登录
       4:   
       5:  /// 
       6:   
       7:  /// 会员model
       8:   
       9:  /// 
      10:   
      11:  public bool MemberLogin(member info)
      12:   
      13:  {
      14:   
      15:  return new memberDAL().MemberLogin(info);
      16:   
      17:  }
      18:   
      19:  /// 
      20:   
      21:  /// 返回给客户端的json格式数据(用于根据用户登录状态决定)
      22:   
      23:  /// 
      24:   
      25:  /// 
      26:   
      27:  /// 
      28:   
      29:  public string ReturnJson(member info, out bool Status)
      30:   
      31:  {
      32:   
      33:  //登录状态
      34:   
      35:  Status = MemberLogin(info);
      36:   
      37:  //生成json格式数据
      38:   
      39:  return WriteJsonForLogin(Status, info.username);
      40:   
      41:  }
      42:   
      43:  /// 
      44:   
      45:  /// 记住帐号和密码的枚举
      46:   
      47:  /// 
      48:   
      49:  public enum RememberType
      50:   
      51:  {
      52:   
      53:  /// 
      54:   
      55:  /// 记住帐号
      56:   
      57:  /// 
      58:   
      59:  RememberName = 0,
      60:   
      61:  /// 
      62:   
      63:  /// 同时记住帐号和密码
      64:   
      65:  /// 
      66:   
      67:  RememberNameAndPwd = 1,
      68:   
      69:  /// 
      70:   
      71:  /// 不记住帐号密码
      72:   
      73:  /// 
      74:   
      75:  NoRemember = 2
      76:   
      77:  }
      78:   
      79:  /// 
      80:   
      81:  /// 根据保存帐号密码状态判断是保存帐号还是同时保存帐号和密码
      82:   
      83:  /// 
      84:   
      85:  /// "1"代表保存,"0"代表不保存
      86:   
      87:  /// "1"代表保存,"0"代表不保存
      88:   
      89:  /// 
      90:   
      91:  public RememberType GetRememberType(string IsSaveName, string IsSavePwd)
      92:   
      93:  {
      94:   
      95:  RememberType SaveType = RememberType.NoRemember;
      96:   
      97:  //保存帐号和密码
      98:   
      99:  if (IsSaveName.Equals("1") && IsSavePwd.Equals("1"))
     100:   
     101:  {
     102:   
     103:  SaveType = RememberType.RememberNameAndPwd;
     104:   
     105:  }
     106:   
     107:  //保存帐号
     108:   
     109:  if (IsSaveName.Equals("1") && !IsSavePwd.Equals("1"))
     110:   
     111:  {
     112:   
     113:  SaveType = RememberType.RememberName;
     114:   
     115:  }
     116:   
     117:  else if(!IsSaveName.Equals("1"))
     118:   
     119:  {
     120:   
     121:  SaveType = RememberType.NoRemember;
     122:   
     123:  }
     124:   
     125:  return SaveType;
     126:   
     127:  }
     128:   
     129:  /// 
     130:   
     131:  /// 检查用户登录状态,用于验证自动登录(并返回json格式)
     132:   
     133:  /// 
     134:   
     135:  /// 
     136:   
     137:  public string CheckLoginStatus()
     138:   
     139:  {
     140:   
     141:  //登录状态
     142:   
     143:  bool Status = true;
     144:   
     145:  string UserName = Common.CookieHelper.GetCookieValue("UserName");
     146:   
     147:  //如果cookies为空,直接返回
     148:   
     149:  if (Tools.IsNullOrEmpty(UserName))
     150:   
     151:  {
     152:   
     153:  Status = false;
     154:   
     155:  }
     156:   
     157:  string Pwd = Common.CookieHelper.GetCookieValue("Pwd");
     158:   
     159:  if (Tools.IsNullOrEmpty(Pwd))
     160:   
     161:  {
     162:   
     163:  Status = false;
     164:   
     165:  }
     166:   
     167:  else
     168:   
     169:  {
     170:   
     171:  //查找该用户真实密码,并进行md5加密
     172:   
     173:  string password = Tools.GetMD5(new memberDAL().GetPassword(UserName));
     174:   
     175:  //如果两次密码相同则可以自动登陆了
     176:   
     177:  if (!password.Equals(Pwd))
     178:   
     179:  {
     180:   
     181:  Status = false;
     182:   
     183:  }
     184:   
     185:  }
     186:   
     187:  //生成json格式数据
     188:   
     189:  return WriteJsonForLogin(Status, UserName);
     190:   
     191:  }
     192:   
     193:  /// 
     194:   
     195:  /// 为用户登录写入json数据
     196:   
     197:  /// 
     198:   
     199:  /// 登录状态
     200:   
     201:  /// 用户名
     202:   
     203:  /// 
     204:   
     205:  public string WriteJsonForLogin(bool Status, string UserName)
     206:   
     207:  {
     208:   
     209:  StringBuilder json = new StringBuilder();
     210:   
     211:  StringWriter sw = new StringWriter(json);
     212:   
     213:  using (JsonWriter jsonWriter = new JsonTextWriter(sw))
     214:   
     215:  {
     216:   
     217:  jsonWriter.Formatting = Formatting.Indented;
     218:   
     219:  jsonWriter.WriteStartObject();
     220:   
     221:  jsonWriter.WritePropertyName("Status");
     222:   
     223:  jsonWriter.WriteValue(Status);
     224:   
     225:  jsonWriter.WritePropertyName("UserName");
     226:   
     227:  jsonWriter.WriteValue(UserName);
     228:   
     229:  jsonWriter.WriteEndObject();
     230:   
     231:  }
     232:   
     233:  return json.ToString();
     234:   
     235:  }
     236:   
     237:  /// 
     238:   
     239:  /// 记住用户信息
     240:   
     241:  /// 
     242:   
     243:  /// 记住用户信息类别
     244:   
     245:  /// 
     246:   
     247:  public bool RememberUserInfo(member info, RememberType type)
     248:   
     249:  {
     250:   
     251:  if (type == RememberType.RememberName)
     252:   
     253:  {
     254:   
     255:  //记住帐号7天
     256:   
     257:  CookieHelper.SetCookie("UserName", info.username, DateTime.Now.AddDays(7));
     258:   
     259:  }
     260:   
     261:  else if (type == RememberType.RememberNameAndPwd)
     262:   
     263:  {
     264:   
     265:  //md5哈希加密
     266:   
     267:  string sercret = Tools.GetMD5(info.password);
     268:   
     269:  //同时记住帐号和密码7天
     270:   
     271:  CookieHelper.SetCookie("UserName", info.username, DateTime.Now.AddDays(7));
     272:   
     273:  CookieHelper.SetCookie("Pwd", sercret, DateTime.Now.AddDays(7));
     274:   
     275:  }
     276:   
     277:  else
     278:   
     279:  {
     280:   
     281:  return false;
     282:   
     283:  }
     284:   
     285:  return true;
     286:   
     287:  }

    实现效果:

    clip_image004

    总结:

    我们天天都在写用户登录,但是考虑安全性,复用性,却是非常少的,在这次实践过程中,Switch语句,还是一个大问题,至今除了反射没有太好的解决方法,正在考虑!

    可以发现,这次的实现改进非常大,我清晰的记得去年实现这个功能的糟糕代码, 太垃圾了,代码凌乱呀……

    代码重质量,总结分析学习!

    clip_image006

    一直在努力,从未曾放弃,努力学习中..... 欢迎一起学习.net! 分类:  .net,  ajax技术学习

    转载于:https://www.cnblogs.com/MyFlora/archive/2012/05/06/2485867.html


    本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

    相关文章

    立即
    投稿

    微信公众账号

    微信扫一扫加关注

    返回
    顶部