java 对session的基本使用

一、Session简单介绍

在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。

二、Session和Cookie的主要区别

  • Cookie是把用户的数据写给用户的浏览器。
  • Session技术把用户的数据写到用户独占的session中。
  • Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。

三、session实现原理

服务器是如何实现一个session为一个用户浏览器服务的?
服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机,这样,只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号去,服务器发现客户机浏览器带session id过来了,就会使用内存中与之对应的session为之服务。可以用如下的代码证明:

这里我们通过两个不同的浏览器登录将session数据展示在页面上来证实

前端登录页面
java 对session的基本使用_第1张图片

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
</head>
<body>
<h1>用户登录</h1>
用户名:<input  type="text"  id="userName"/>
密码:<input  type="text"  id="password" />
<input type="button" value="登录" onclick="get()"/>
</body>
<script>
function get(){
	var url = "http://localhost:8080/BuyechengServlet/LoginServlet";
	data = {
			"userName":$("#userName").val(),
			"password":$("#password").val()
	}
	 $.ajax({
	        type: "get",//指定提交的类型,get对应doget(),post对应dopost()
	        url: url,
	        data:data,//data代表key -value类型的数据
	        dataType:'JSON',
	        success: function (data)//success、error代表是否返回成功
	        {
	        	console.log(data);
	        	if(data.message == '登陆成功'){
	        		window.location.href = "http://localhost:8080/BuyechengServlet/ShowUser.html";
	        	}
	        	
	        },
	        error:function (XMLHttpRequest, textStatus, errorThrown) { 
	            alert(typeof(errorThrown));
	        }
	     });
}
</script>
</html>

新建loginServlet,实现登录
java 对session的基本使用_第2张图片

//业务逻辑
			response.setCharacterEncoding("utf-8");
	    response.setContentType("application/json; charset=utf-8");
	    
		String userNameString = request.getParameter("userName");
		String passwordString = request.getParameter("password");
		System.out.println(userNameString + "************"+passwordString);
		
		String jsonString = "";
		
		if(IsNullUtil.IsNullTrue(userNameString)) {
			jsonString = "{\"code\":\"200\",\"message\":\"用户名为空\"}";
			response.getWriter().append(jsonString);
			return;
		}else if (IsNullUtil.IsNullTrue(passwordString)) {
			jsonString = "{\"code\":\"200\",\"message\":\"密码为空\"}";
			response.getWriter().append(jsonString);
			return;
		}else {
			String sqlString = "select * from student where userName = '"+userNameString+"' and password = '"+passwordString+"';";
			ArrayList<String[]> arrayList = MysqlUtil.showUtil(sqlString,new  String[] {"id","userName","password"});
			System.out.println("arr.size()"+arrayList.size());
			if(arrayList.size() == 0) {
				jsonString = "{\"code\":\"200\",\"message\":\"查无此人\"}";
			}else if (arrayList.size() == 1) {
				jsonString = "{\"code\":\"200\",\"message\":\"登陆成功\"}";
				
				System.out.println( arrayList.get(0)[0]+"******************");
				
				//设置session,服务器可以为每个用户浏览器创建一个会话对象
				HttpSession session = request.getSession();  
				session.setAttribute("userid", arrayList.get(0)[0]);
			}
			
		}
		response.getWriter().append(jsonString);	

新建ShouUser.html,用来展示用户数据
java 对session的基本使用_第3张图片

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户session展示</title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
</head>
<body onload="get()">
<h1>此页面将会把登录session打印出来</h1>
我们这里存储的session信息是数据库当中的id: <div id="show"></div>
</body>
<script>
function get(){
	 $.ajax({
	        type: "get", //指定提交的类型 get对应 doGet()方法,post--->doPost()犯法
	        url: "http://localhost:8080/BuyechengServlet/ShowUserServlet",    //传输地址的URL
	        data: {}, //data代表我们的数据  key -value类型的数据
	        dataType:'JSON',
	        async : false, //success和error代表是否返回成功,既后台给前台传输数据是否成功
	        success: function (data)
	        {
	        	console.log(data);
	        	//将session信息显示在页面上
	        	$("#show").empty().append(data.message);
	        },
	        error:function (XMLHttpRequest, textStatus, errorThrown) { 
	            alert(typeof(errorThrown));
	        }
	     });
	
}
</script>
</html>

新建ShowUserServlet,用来获取登录时设置的session数据,并将其返回个前端页面

response.setCharacterEncoding("utf-8");
	    response.setContentType("application/json; charset=utf-8");
		String jsonString = "";
		
		//首先判断是否登录
		if (CheckLoginUtil.check(request)) {
			//获取到session值
			HttpSession session = request.getSession(); 
			String sessionMessageString = (String) session.getAttribute("userid");
			jsonString = "{\"code\":\"300\",\"message\":"+sessionMessageString+"}";
		}else {
			jsonString = "{\"code\":\"300\",\"message\":\"未登录不能看\"}";
		}
		response.getWriter().append(jsonString);

判断登录的方法

public class CheckLoginUtil {
	
	public static boolean check(HttpServletRequest request) {
		HttpSession session = request.getSession(); 
		if (session.getAttribute("userid") != null) {
			return true;
		}else {
			return false;
		}
	}
}

最后分别用两个浏览器登录,来看效果
java 对session的基本使用_第4张图片
java 对session的基本使用_第5张图片

你可能感兴趣的:(servlet,session,servlet)