天天看点

session技术进行登录验证问题解析

遇到的问题1:核心问题,就是如果需要做登陆和登陆到主界面的话,需要做三个界面。三个界面分别是: 1:登陆界面 2:验证登陆界面 3:主界面

下面来解释每个界面的作用。登录界面顾名思义了就是登录,目前JSP还不会,就outprintln代码了(大佬不要笑)。这里有一个问题,我最开始的思路是,直接在这个界面申请出一个session然后把这个界面文本框的值给session。这时候经过测试发现,在本界面无法使用

String uname = req.getParameter("username");
           

来获得文本框的值了,这时候就算直接输出uname,uname也是空。那么我是怎么处理的呢? 答案在界面2,也就是登录验证界面 先直接甩出代码

/注册驱动
Class.forName("com.mysql.jdbc.Driver");
//创建出数据库连接对象并使用三个参数,接口,用户名,密码                                      conn = DriverManager.getConnection(url, name, password);
System.out.println("连接数据库成功");
//预编译对象
String sql = "select* from user where userName = ? and userPass = ?";
ps = conn.prepareStatement(sql);
//赋值
ps.setString(1,uname);
ps.setString(2,upass);
//执行
rs = ps.executeQuery();
//业务逻辑
if(rs.next()){
 HttpSession session = req.getSession();
 session.setAttribute("userName", uname);
 resp.sendRedirect("MainFace");
}else{
String flag = "用户名密码错误!";
flag = java.net.URLEncoder.encode(flag.toString(),"UTF-8");
resp.sendRedirect("Login?flag="+flag);
}
           

我这个用户名密码的验证通过JDBC访问了自己电脑里的MySQL数据库。然后,让判定登录成功的时候,申请一个session然后把这个成功并且正确的username赋值给session 然后进行到页面3也就是主页面。 主页面没什么好说的,就是首先判断一下是不是非法登录。也就是session的userName是不是空。如果username值是空的话,说明用户没用经过页面2的验证界面直接访问了主界面,所以是非法登录的,这时候就要给它反回主界面并且提示出非法登录。关于get方法在地址栏反回中文的问题我的其他博客有详细介绍,在此不多叙述了。下面给出页面三也就是主界面的代码:

PrintWriter out = resp.getWriter();
		HttpSession session = req.getSession();
		if(session.getAttribute("userName") == null){
			String flag = "非法登录!";
			flag = java.net.URLEncoder.encode(flag.toString(),"UTF-8");
			resp.sendRedirect("Login?flag="+flag);
		}
		out.println("欢迎管理员:"+session.getAttribute("userName"));