天天看点

java_web:session与cookie的区别

session的特点

a.session存储在服务器

b.session是在同一个用户(客户)请求时共享

c.session实现机制

第一次客户请求时,产生一个sessionid并且复制给cookiedejssionid

然后,发送给客户端,

最终,通过session的sessionid与cookie的jsessionid实现一一对应的关系

d.同一次会话共享session

session与cookie的区别

a.session保存的位置在服务端,cookie保存的位置在客户端

b.session较安全,cookie较不安全

c.session保存的内容为Object,cookie保存的内容为string

cookie补充说明*

a.服务端在第一次响应客户端时,若服务端发现此请求没有JSESSIONID,

则会自动创建并返回一个name=JSESSIONID的cookie

b.cookie不是内置对象,要使用,必须new

应用案例:创建login.jsp页面提交数据到check.jsp页面(作为服务端产生cookie),再由该页面跳转到welcome.jsp页面。另创建一个a.jsp页面来查看session产生的cookie与JSESIONID

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="check.jsp" method="post">
		用户名:<input type="text" name="uname"><br>
		密码:<input type="password" name="upwd"><br>
		<input type="submit" value="登录"><br>
	</form>
</body>
</html>
           

check.jsp

<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		request.setCharacterEncoding("utf-8");
		String name=request.getParameter("uname");
		String pwd=request.getParameter("upwd");
		if(name.equals("zs")&&pwd.equals("abc")){
			//登录成功的话将其值赋给session对象
			//只有登录成功,session中才会存在uname/upwd
			session.setAttribute("uname", name);
			session.setAttribute("upwd", pwd);
			
			//将sessionId打印到控制台
			System.out.println("SESSIONID-----"+session.getId());
			
			//服务端产生cookie
			//Cookie cookie=new Cookie("uname",name);
			//response.addCookie(cookie);
			
			//服务端在第一次响应客户端时,会自动发送一个JSESSIONID的cookie
			
			//设置最大有效非活动时间(10s)
			//session.setMaxInactiveInterval(10);
			request.getRequestDispatcher("welcome.jsp").forward(request, response);
		}
		else{
			//登录失败则重新登录
			response.sendRedirect("login.jsp");
		}
	%>
</body>
</html>
           

welcome.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
欢迎您:
	<%
		//将object转成string对象
		String name=(String)session.getAttribute("uname");
		//优化
		//如果没有登录,则跳转到登录页面
		if(name!=null){
			out.print(name);
		
			//
			
		//java代码中嵌套html代码
		//加一个超链接实现session的注销
	%>
		<a href="invalidate.jsp" target="_blank" rel="external nofollow" >注销</a>
	<%
		}else{
			response.sendRedirect("login.jsp");
		}
		
	%>
</body>
</html>
           

a.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		//同一次会话共享session 
		//实现注销后,无法访问该(uname)字段
	%>
	<%
		out.print(session.getAttribute("uname"));
		Cookie[] cookies=request.getCookies();
		for(Cookie cookie:cookies){
			if(cookie.getName().equals("JSESSIONID")){
				System.out.println("JSESSIONID-----"+cookie.getValue());
			}
		}
	%>
</body>
</html>
           

invlidate.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		//实现seission的注销
		session.invalidate();
		response.sendRedirect("login.jsp");
		//指定失效字段(一般不推荐)
		//session.removeAttribute("uname");
	%>
</body>
</html>