利用session解决重复提交的问题

RegisterServletUI.java

public class RegisterServletUI extends HttpServlet {
	//
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		// 产生一个唯一的值
		String token = "";

		try {
			token = UUID.randomUUID().toString();

			MessageDigest md = MessageDigest.getInstance("MD5");
			byte[] bs = md.digest(token.getBytes());
			// 采用数据指纹进一步加密,拿到的数据称为数据指纹:原理 三字节变四字节 00000000 - 00111111 0~63
			BASE64Encoder base = new BASE64Encoder();
			token = base.encode(bs);
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		// 将指令存储到session
		request.getSession().setAttribute("stoken", token);

		String error = (String) request.getAttribute("error");
		if (error != null) {
			out.write(error);
		}

		// 创建页面
		out.write("<form action='" + request.getContextPath()
				+ "/servlet/RegisterServlet' method = 'post'><br>");
		out.write("姓名:<input type = 'hidden' name='ftoken' value='" + token
				+ "'><br>");
		out.write("姓名:<input type = 'text' name='username'><br>");
		out.write("<input type='submit' value='注册' ><br>");
		out.write("</form>");
	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

RegisterServlet.java

public class RegisterServlet extends HttpServlet {
	
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
	
		
		String name = request.getParameter("username");
		String ftoken = request.getParameter("ftoken");
		
		if("".equals(name)){
			request.setAttribute("error", "用户名必须填写");
			request.getRequestDispatcher("RegisterServletUI").forward(request, response);
			
		}else{
			String stoken = (String) request.getSession().getAttribute("stoken");
			if(ftoken.equals(stoken)){
				out.write("用户已经存在数据库中");
				request.getSession().removeAttribute("stoken");
			}else{
				out.write("请不要重复提交");
				response.setHeader("Refresh", "2;ur="+request.getContextPath()+"/servlet/RegisterServletUI");
			}		
		}
		
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request,response);
	}

}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<?php header('content-type:text/html;charset=utf-8'); //登录界面 require 'ljsql.php';//连接数据库 //判断表单是否提交,用户名密码是否提交 if (isset($_POST['username'])&&isset($_POST['password'])){//登录表单已提交 //获取用户输入的验证码 $captcha = isset($_POST['captcha']) ? trim($_POST['captcha']) : ''; //获取Session中的验证码 session_start(); if(empty($_SESSION['captcha'])){ //如果Session中不存在验证码,则退出 exit('验证码已经过期,请返回并刷新页面重试。'); } //获取验证码并清除Session中的验证码 $true_captcha = $_SESSION['captcha']; unset($_SESSION['captcha']); //限制验证码只能验证一次,防止重复利用 //忽略字符串的大小写,进行比较 if(strtolower($captcha) !== strtolower($true_captcha)){ exit('您输入的验证码不正确!请返回并刷新页面重试。'); } //验证码验证通过,继续判断用户名和密码 //获取用户输入的用户名密码 $username=$_POST["username"]; $pwd=$_POST["password"]; $sql="select id,username,password from user where username='$username' and password='$pwd';"; $result=mysqli_query($con, $sql);//执行sql语句 $row=mysqli_num_rows($result);//返回值条目 if (!$row){//若返回条目不存在则证明该账号不存在或者密码输入错误 echo "<script>alert('账号不存在或密码错误,点击前往注册');location='./register.php'</script>"; //exit('账号或密码错误'); }else{//存在返回条目证明用户账号密码匹配,进入主页面 session_start(); $_SESSION['username']=$_POST['username']; echo "<script>alert('欢迎{$username}');location='../cwyy/index.html'</script>"; } }登录页面为什么登录不进去
06-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值