【Java EE_会话跟踪】

前言:http协议是一种无状态的协议,它不记录任何客户端相关信息

会话技术

从打开浏览器访问某个站点,到关闭这个浏览器的整个过程,就是一次会话。会话技术就是记录这次会话过程中客户端的状态以及数据

常用的两个会话技术Session 和 Cookie

Session

Session:存储在服务器。安全性好,但是增加服务器压力。

Session概述

Session 技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间存储客户的数据,但客户端需要每次都携带一个表示ID去服务器中寻找属于自己的内存空间。所以说Session的实现是基于Cookie,Session需要借助Cookie存储客户的唯一标识JSESSIONID

操作Session(API)

HttpSession session = request.getSession();

此方法会获得专属于当前会话的Session对象,如果服务器端没有该会话的Session对象会创建一个新的Session返回,如果已经有了属于该会话的Session直接将已有的Session返回(实质就是根据JSESSIONID判断该客户端是否在服务器上已经存在session)

getMaxInactiveInterval()

获取Session 的有效时间,单位为秒

//先实例化session对象
HttpSession session = req.getSession();
//查看Session 的有效时间
session.getMaxInactiveInterval();
invalidate()

使当前 Session 失效,如退出登录时调用

//先实例化session对象
HttpSession session = req.getSession();
//使当前 Session 失效
session.invalidate();
setMaxInactiveInterval(int seconds)

设置 Session 的有效时间,单位为秒

//先实例化session对象
HttpSession session = req.getSession();
//设置7天后过期——免登陆理念
session.setMaxInactiveInterval(7*24*60*60);
getId()

用于获取 session对象的ID

//先实例化session对象
HttpSession session = req.getSession();
//使用getId获取到ID,打印
System.out.println("SessionId="+session.getId());
isNew()

判断当前会话是否是新建的会话

//Session对象实例化
HttpSession session = req.getSession();
//判断当前会话是否为新建会话,true/false
System.out.println(session.isNew());
removeAttribute(String name)

根据键从session中移除某个数据

//session实例化
HttpSession session = req.getSession();
//向session存键值对name=zhangsan
session.setAttribute("name","zhangsan");
//移除键为name的数据,键值对name=zhangsan
session.removeAttribute("name");
setAttribute(String name,Object value)

用于以键值对形式向session中存入数据

@WebServlet("/session")
public class Session extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(req, resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//session对象实例化,当cookie中没有对应的JESSESSIONID,就会创建实例
		HttpSession session = req.getSession();
		//isNew()方法能告诉你当前会话是否是新建的会话
		System.out.println(session.isNew());
		//getId()方法获取到SessionId打印
		System.out.println("SessionId="+session.getId());
		//将键值对保存到服务器
		session.setAttribute("name","zhangsan");
	}
	
}

getAttribute(String name)

从session中获取指定键的值

@WebServlet("/getSession")
public class GetSessionServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//session对象实例化,当cookie中没有对应的JESSESSIONID,就会创建实例
		HttpSession session = req.getSession();
		//创建name对象使用session.getAttribute()方法获取到保存在服务器中对应name的值
		Object name = session.getAttribute("name");
		//处理乱码
		resp.setContentType("text/html;charset=utf-8");
		//打印值
		resp.getWriter().print("name="+name);
	}

}

Cookie

Cookie:存储在客户端本地(浏览器),减少服务器端的存储压力,安全性较差,客户端可以清楚Cookie。

Cookie概述

  • Cookie 是Web 服务器在 HTTP 响应信息中附带传送给客户端浏览器的一段数据。一旦浏览器保存了这段数据,那么在以后每次访问该Web 服务器时,都会在 HTTP 请求中将这段数据带给 Web 服务器
  • Cookie 是最先由 Web 服务器发出的,是否发送Cookie 和发送 Cookie的具体内容,完全由服务器端程序来决定,但是Cookie数据是存储在客户端

操作Cookie (API)

addCookie()

添加Cookie

//创建Cookie对象,键值对
Cookie cookie = new Cookie(“goods”, “phone”);
//将Cookie添加到浏览器对象
resp.addCookie(cookie);

@WebServlet("/addCookie")
public class AddCookieServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//创建Cookie对象,键值对
		Cookie cookie = new Cookie("goods", "phone");
		//将Cookie添加到浏览器对象
		resp.addCookie(cookie);
		//处理乱码
		resp.setContentType("text/html;charset=utf-8");
		//自定义反馈信息
		resp.getWriter().append("添加成功");
	}
}

getCookie()

获取Cookie

getName方法用于获取Cookie的名称 getValue方法用于获取Cookie的值

@WebServlet("/getCookie")
public class GetCookieServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(req, resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//获取全部Cookie
		Cookie[] cookies = req.getCookies();
		//遍历打印所有cookie键值对
		if(cookies != null) {
			for(int i=0; i<=cookies.length; i++) {
			//getName方法用于获取Cookie的名称
				String name = cookies[i].getName();
			//getValue方法用于获取Cookie的值
				String value = cookies[i].getValue();
				resp.getWriter().append(name+":"+value);
			}
		}
	}
}

setMaxAge()

设置 Cookie的有效时间,单位为秒

//实例化Cookie
Cookie cookie = new Cookie("name","张三");
//留存7天
cookie.setMaxAge(7*24*60*60);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值