状态管理Cookie和Session和Token

会话发展史

彻底理解cookie,session,token - 老刘的文章 - 知乎 https://zhuanlan.zhihu.com/p/63061864

为什么需要状态管理?

    Web应用程序使用的是Http协议,该协议是"无状态"协议,即同一用户发了两次请求,建立了两次连接,但是服务器无法判断这两个请求是否是同一个人发出的,而我们的应用程序有时是需要判断是否为同一个客户发出的请求,比如客户多次选购商品,因此,有必要跟踪同一客户发出的一系列请求.

状态管理的两种常见模式

    客户端状态管理技术:将状态保存在客户端,代表性的是Cookie技术.

    服务器端状态管理技术:将状态保存在服务器端,代表性的是Session技术.

Cookie

    浏览器向服务器发请求,服务器会将少量的数据以set-Cookie消息头的方式发送给浏览器,浏览器将这些数据保存起来,当浏览器再次访问服务器时,会将这些数据以Cookie消息头的方式发送给浏览器.

Cookie用法

    直接看代码吧,注释表明用法

public class CookieServlet extends HttpServlet {

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//创建Cookie
		Cookie cookie =new Cookie("name", "zjc");
		//添加Cookie到response中
		response.addCookie(cookie);
		//读取Cookie
		Cookie[] cookies=request.getCookies();
		if(cookies!=null){
			for (Cookie ck : cookies) {
				if(ck.getName().equals("name")){
					System.out.println(ck.getValue());
				}
			}
		}else{
			System.out.println("没有Cookie信息");
		}
		//修改Cookie
		if(cookies!=null){
			for (Cookie ck : cookies) {
				if(ck.getName().equals("name")){
					//覆盖原来的value(zjc)
					ck.setValue("xiaocheng");
					//添加Cookie到response中
					response.addCookie(ck);
				}
			}
		}
		//设置Cookie保存时间,单位为秒
		//seconds > 0:保存在硬盘上的时间
		//seconds = 0:立即删除
		//seconds <0 :默认,保存在浏览器的内存中
		cookie.setMaxAge(10);
		//Cookie中文编码
		Cookie cookie2 =new Cookie("mingzi", URLEncoder.encode("张金程","UTF-8"));
		response.addCookie(cookie2);
		if(cookies!=null){
			for (Cookie ck : cookies) {
				if(ck.getName().equals("mingzi")){
					//解码
					System.out.println(URLDecoder.decode(ck.getValue(), "UTF-8"));
				}
			}
		}
	}
}

Session

    浏览器访问服务器时,服务器会为每一个浏览器在服务器端的内存中创建一个Session对象,这个对象有个SessionId的属性,其值唯一,并以Cookie的方式发给浏览器,下次浏览器再访问服务器时,服务器就可以拿到这个SessionId,并根据这个SessionId找到Session对象.(这些过程都是服务器做的)

Session用法

    直接看代码吧,注释表明用法

public class SessionServlet extends HttpServlet {

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//获得Session对象
		HttpSession session=request.getSession();
		//绑定数据
		session.setAttribute("name", "zjc");
		//获得数据
		String name=(String)session.getAttribute("name");
		//移除数据
		session.removeAttribute("name");
		//删除Session对象
		session.invalidate();
		//修改Session对象的超时时间(一般是30分钟),时间过了就删除Session对象,单位为秒
		session.setMaxInactiveInterval(600);
	}
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值