JSP中cookie、session及其实例

Cookie

定义

  1. Cookie(客户端,不是内置对象):Cookie是由服务端产生的,再发送给客户端保存。相当与本地缓存的作用:客户端(hello.mp4; zs/abc )→服务端(hello.mp4; zs/abc )
  2. 作用:提高访问服务端的效率,但安全性较差
  3. 用法cookie: key = value
要求实现
所在的类javax.servlet.http.Cookie
构造方法public Cookie(String key, String value)
获取nameString getName()
获取valueString getValue()
设置最大有效期(秒)void setMaxAge(int expiry)

流程

  1. 服务端准备Cookie:response.addCookie(Cookie cookie)
  2. 页面跳转到客户端(转发,重定向)例如:response.sendRedirect(“A.jsp”); 其中A.jsp为客户端
  3. 客户端获取cookie:request.getCookies()

注意点

  1. 通过网页F12可以发现 除了自己设置的Cookie对象之外,还有一个name为JSESSIONID的cookie。
  2. 建议cookie只保存英文和数字,否则需要进行编码、解码。
  3. 服务端增加cookie:response.addCookie();
  4. 客户端获取cookie: request.getCookies();
  5. 不能获取某一个单独对象,只能一次性将全部的cookie拿到。
  6. 客户端在第一次请求服务器时,如果服务器发现此请求没有JSESSIONID,则会创建一个name=JSESIONID的cookie并返回客户端。
  7. Cookie不是内置对象,要使用必须new,但是服务端会自动生成一个(服务端自动new一个cookie)name=JSESIONID的cookie,并返回给客户端。

Cookie实例(记住账号)

客户端登录界面(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>
	 <%!
		String uname;
	 %>
	 <%
	 	Cookie[] cookies = request.getCookies();
	 	for(Cookie cookie: cookies){
	 		if(cookie.getName().equals("uname")){
	 			uname = cookie.getValue();
	 		}
	 	}
	 %>
     <form action="check.jsp" method="post">
     	用户名:<input type="text"   name="uname" value="<%=(uname==null?"":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>
<html>
<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");
		
		Cookie cookie = new Cookie("uname",name);
		
		response.addCookie(cookie);
		
		response.sendRedirect("A.jsp");
		
		
		//请求转发 可以获取到数据 并且地址栏也没有发生改变 仍然保留检查的页面
		//      请求转发     重定向
	%>
</body>
</html>
跳转客户端页面(A.jsp):
```javascript
<%@ 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>

</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>

</body>
</html>

session

定义

session: 会话
a.浏览网站:开始——关闭
b.购物:浏览、付款、退出
a.电子邮件:浏览、写邮件、退出
即:开始 —— 结束

机制

  1. 客户端第一次请求服务端时:(JSESSIONID —— sessionID)
    (1) 客户端会产生一个session对象(用于保存该客户的信息);并且每个session对象都会有一个唯一的sessionId(用于区分其他session);
    (2) 服务端会产生一个cookie,并且该cookie的name=JSESSIONID,value=服务端sessionId的值;
    (3) 然后服务端会在响应客户端的同时将该cookie发送给客户端,至此客户端就有了一个cookie(JSESSIONID);
    (4) 因此,客户端的cookie就可以和服务端的session一一对应(JSESSIONID —— sessionID)
  2. 客户端第二/N次请求服务端时:服务端会先用客户端cookie中的JSESSIONID去服务端的session中匹配sessionid,如果匹配成功(cookie JSESSIONID 和 session sessionid ),说明此用户不是第一次访问,无需登录;
  3. 特点
    a: session存储在服务端;
    b: session是在同一个用户(客户)请求时 共享;
    c: session实现机制:第一次客户请求时,产生一个sessionid并复制给cookie的jsessionid然后发给客户端。最终通过session的sessionid和cookie的jsessionid进行比较,实现一一对应的关系。
    d: 同一次会话共享

用法

要求实现
获取sessionidString getId()
判断是否是新用户(第一次访问)boolean isNew()
使session失效(退出登录、注销)void invalidate()
void setAttribute()
Object getAttribute()
设置最大有效非活动时间(秒)void setMaxInactiveInterval(秒)
获取最大有效非活动时间(秒)int getMaxInactiveInterval(秒)

session实例(登录功能)

客户端登录界面(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 ="登录" >
     </form>
</body>
</html>

服务端检查页面(check.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>
	<% 
		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.setMaxInactiveInterval(10);
			session.setAttribute("upwd", pwd);
			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>
 	欢迎您:
 	<%
 		String name = (String)session.getAttribute("uname");
 		//如果用户没有登录,而是直接通过地址栏访问welcome.jsp,则必然获取的是name是null
 		//如果没有登录,应该跳回到登录页
 		if(name!=null){
 			out.print(name);
 		}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.getAttribute("uname")
	%>
</body>
</html>

Cookie和session的区别

Cookiesession
保存的位置客户端服务端
安全性较不安全较安全
保存的内容StringObject
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值