本文目录一览:
这个跟登陆是相似的,登陆是正好密码都对就能登陆,这个你可以验证用户输入和数据库是否一致,若问题答案都一致,就弹出个重置密码的框
1.建立一个数据库,至少有以下字段
username varchar(30) 存放用户名
userpwd varchar(30) 存放用户密码
userques varchar(255) 存放用户问题 用于记不起密码的找回
userkey varchar(255) 存放问题答案
2.建立 *** P页面
两个输入框
用户名 input type="text" name="username"br
显示问题:这里高用数据库,读取问题,也可以直接做一个下垃列表,让用户选择问题,再检查问题是不是用户注册时选择的问题,如果是,就允许输入答案,如果不是,就提示问题不对
问题答案:input type="text" name="userkey"br
3.编写处理提交找回密码的 *** P
%
String username = request.getParameter("username").trim();
String userques = request.getParameter("userques").trim();
String userpwd = ""; //定义密码
if(username == 数据库查询用户 userques == 数据库查询问题) {
userpwd = 查询数据库;
session.setAttribute("userpwd", userpwd);
}
%
4.在 *** P里取出userpwd
%
String userpwd = session.getAtribute("userpwd");
%
设置到 *** P显示就可以啦
登录页面login.jsp,登录后提交到servlet验证
form name="login" action="LoginServlet"
TABLE width="100%" style="cellpadding: 0px; cellspacing: 0px; margin-top: 0px; margin-Left: 0px" style="table-layout: fixed;WORD-BREAK: break-all; WORD-WRAP: break-word"
TR
TD style="color:#4c4743;line-height:160%;" valign="top"
width="30%"
用户名:
/TD
TD style="color:#4c4743;line-height:160%;" valign="top"
input type="text" name="userName" /
/TD
/TR
TR
TD style="color:#4c4743;line-height:160%;" valign="top"
width="30%"
密 码
/TD
TD style="color:#4c4743;line-height:160%;" valign="top"
input type="text" name="password" /
/TD
/TR
TR
TD style="color:#4c4743;line-height:160%;" valign="top"
width="30%"
input type="submit" value="提交" /
/TD
TD style="color:#4c4743;line-height:160%;" valign="top"
input type="reset" value="重置" /
/TD
/TR
/TABLE
/form
LoginServlet验证:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=GBK");
String userName=request.getParameter("userName");
String password=request.getParameter("password");
Users users=new Users(userName,password);
UserBo userbo=new UserBo();
if(userbo.checkLogin(users)){
HttpSession session=request.getSession();
session.setAttribute("users", users);
response.sendRedirect("SelectServlet");
}else{
String script = "scriptalert('用户名或密码错误,请重新登陆');location.href='index.jsp'/script";
response.getWriter().println(script);
}
}
验证
首先用户名会到数据库里面去找
如果有这个用户名,密码又不匹配,连续输入几次会计数,在限制次数以内会报输入错误,超过限定次数报忘记密码
!然后实现!整个过程如果你就这样问个问题,想给代码
,估计不可能!因为技术层面,当程序员很辛苦的,尽量帮多点,不过完全写很累啊!呵呵
数据库中存用户名密码的表,加几个列,用来存密码保护的问题和答案,从jsp页面上获取用户输入的账号,通过用户名上数据库中查找返回一个用户对象,然后在页面上显示密码保护问题,让用户填写答案,在把数据库中的答案和用户输入的比较一下,如果两个字符串相等,就把密码给用户,不相等就重新回答
实现思路:在jsp页面上放一个找回密码的入口,然后用户点进去后,要求输入用户名和邮箱,然后根据这个邮箱发送一封邮件,参数是用户名,根据这个用户名点击确认,然后跳转到找回密码页面就可以了。
参考代码:
一.发送邮箱页面
string strUserName = txtUserName.Value.Trim();
string strEail = txtEmail.Value.Trim();
//生成随机密码
string rand = "";
Random ramPwd = new Random();
string pwd = ramPwd.Next(100000, 9999999).ToString();
rand = pwd;
string key = rand + strName + email + "Base";
if (!string.IsNullOrEmpty(strUserName) !string.IsNullOrEmpty(strEail))
{
//发送邮件
StringBuilder *** = new StringBuilder();
*** .Append("亲爱的" + strUserName + "您好:br/br/");
*** .Append("点击以下链接设置新密码。br/br/");
*** .Append("a href =\"" + key + "time=" + time + "\"" + key + "time=" + time + " /abr/br/");
*** .Append("(如果无法点击该URL链接地址,请将它复制并粘帖到浏览器的地址输入框,然后单击回车即可。)br/br/");
*** .Append("注意:请您在收到邮件24小时内使用,否则该链接将会失效。br/br/");
*** .Append("我们将一如既往、热忱的为您服务!br/br/");
string MessageBody = *** .ToString();
Sends(strEail, "no_reply@xxxx.com", "xxxx--找回密码", MessageBody, "123456");
//向find_password_log表添加数据
AddFindPassword(strUserName, strEail,key);
Response.Write("scriptalert('邮件已发送到你的邮箱,请注意查收!');location.href='/';/script");
}
}
//向表find_password_log中添加数据
private void AddFindPassword(string strName, string email, string key)
{
//向find_password_log表中插入随机生成的密码(MD5加密) ,时间,IP
SummerBase.BLL.find_password_log bllFind = new SummerBase.BLL.find_password_log();
SummerBase.Model.find_password_log modelFind = new SummerBase.Model.find_password_log();
if (modelFind != null)
{
modelFind.Md5 = MFunction.Md5New(key).ToString();
modelFind.CreateTime = SummerBase.Utils.Util.TimeToUnixTimes(DateTime.Now.ToString());
modelFind.IP = Page.Request.UserHostAddress;
time = modelFind.CreateTime;
key = modelFind.Md5;
}
bllFind.Add(modelFind);
}
//发送邮件代码
public static void Sends(string email, string formto, string content, string body, string upass)
{
string name = "no_reply@xxxx.com";
string *** tp = " *** tp.exmail.sin *** ";
SmtpClient _ *** tpClient = new SmtpClient();
_ *** tpClient.DeliveryMethod = SmtpDeliveryMethod.Network;//指定电子邮件发送方式
_ *** tpClient.Host = *** tp; //指定 *** TP服务器
_ *** tpClient.Credentials = new System.Net.NetworkCredential(name, upass);//用户名和密码
MailMessage _mailMessage = new MailMessage();
//发件人,发件人名
_mailMessage.From = new MailAddress(formto, "xxxx公司");
//收件人
_mailMessage.To.Add(email);
_mailMessage.SubjectEncoding = System.Text.Encoding.GetEncoding("gb2312");
_mailMessage.Subject = content;//主题
_mailMessage.Body = body;//内容
_mailMessage.BodyEncoding = System.Text.Encoding.GetEncoding("gb2312");//正文编码
_mailMessage.IsBodyHtml = true;//设置为HTML格式
_mailMessage.Priority = MailPriority.High;//优先级
try
{
_ *** tpClient.Send(_mailMessage);
}
catch (Exception)
{
}
}