对cookie与session的浅显理解

cookie与session纯洁的友谊


区别 session cookie
保存的位置 服务端 客户端
安全性 较安全 较不安全
保存的内容 Object String
  1. 服务端增加cookie:response对象
  2. 客户端获取对象:request对象
  • 建议cookie只保存英文和数字,否则需要进行编码、解码

  • 服务器准备Cookie:response.addCookie(Cookie cookie)

  • 页面跳转(转发、重定向)

  • 客户端获取cookie:request.getCookies();

  • session存储在服务端

  • session是在同一个用户请求时共享

cookie常用的方法:
Cookie:name=value
(javax.servlet.http.Cookie)
public Cookie (String name , String value)
String getName():获取name
String getValue():获取value
void setMaxAge(int expriry):设置最大有效期(秒)

session常用的方法
String getId():获取sessionId
boolean isNew():判断是否为第一次访问
void invalidate():使session失效
void setMaxInactiveInterval():设置最大有效非活动时间(秒)
int getMaxInactiveInterval():获取最大有效非活动时间(秒)
void setAttribute()
Object getAttribute()


手牵手,好朋友

对cookie与session的浅显理解_第1张图片

  • session的实现机制:
    客户端第一次请求服务端时,先寻找客户端的cookie是否存在JSESSIONID与服务端的SESSIONID一一对应。如果没有对应的JSESSIONID与之对应,那么服务端会产生一个session对象(用于保存客户的信息),并且每个session对象,都会有一个唯一的SESSIONID(用于区分其他session)
    服务端就会产生一个cookie,并把该session对象产生的SESSIONID复制到cookie中,即JSESSIONID。

cookie的name=JSESSIONID,value=服务端的SESSIONID

服务端在响应客户端的同时,将cookie发送给客户端。所以,在客户端第一次请求之后,都会产生唯一的JSESSIONID与服务端的SESSIONID一一对应。

客户端第n(n>1)次请求服务端时,客户端直接通过cookie中的JSESSIONID找到服务器中对应的SESSIONID,然后得到客户登录的信息。


我要找到你,凭借JSESSIONID

对cookie与session的浅显理解_第2张图片

对cookie与session的浅显理解_第3张图片

简单代码实现

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; 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="登录">
	</form>
</body>
</html>

check.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; 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("123")){
			//只有登录成功,session中才会存在uname/upwd
			session.setAttribute("uname", name);
			session.setAttribute("upwd", pwd);
			session.setMaxInactiveInterval(10);
			//采用转发的方式
			request.getRequestDispatcher("welcome.jsp").forward(request, response);
			
		}else{
			//登陆失败
			response.sendRedirect("login.jsp");
		}
	%>
</body>
</html>

welcome

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	欢迎您:
	<%
		String name = (String)session.getAttribute("uname");
	//如果用户没有登录。而是直接通过地址栏访问welcome.jsp,则必然获取到的name是null
	//如果没有登录,应该跳转登陆页面
		if(name != null ){
			out.print(name);
		}else{
			response.sendRedirect("login.jsp");
		}
	%>
</body>
</html>

你可能感兴趣的:(JAVA)