Cookie和session小结

本文介绍了HTTP协议中的会话管理技术,包括客户端的Cookie和服务器端的Session机制。详细阐述了Cookie的工作原理、设置方法及生命周期管理,并解释了Session如何帮助服务器记录客户端状态,以及如何通过配置实现Session的持久化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、由于http协议是无状态的,为了帮助服务器记录浏览器端的状态,就有了会话技术。会话技术分为cookie(客户端)和服务器端(session)。一次会话技术的过程是(默认)从浏览器第一次打开网址到这个浏览器关闭为止。
2、Cookie的内容是存在浏览器端,默认是浏览器关闭,Cookie的内容就取消。除非设置了Cookie的时间。cookie.setMaxAge(int second);

	   //设置cookie
		Cookie cookie1=new Cookie("name", "andy");
		//向response添加cookie
		response.addCookie(cookie1);	
		//获取所有的cookie
			Cookie[] cookies = request.getCookies();
			if (cookies!=null) {
				
			for (Cookie cookie : cookies) {
				String name = cookie.getName();
				String value = cookie.getValue();
				System.out.println("cookie name:"+name+";value is:"+value);
				 }
			}
		
	

Cookie的设置,除了时间,还有个路径。如果没有设置的话,默认就是访问路径上一层的资源路径。比如一个http://localhost:8080/user/path1/testHttp?username=andy&password=123产生了Cookie。

Cookie cookie1=new Cookie("name", "lucy");
	//	cookie1.setPath("/user/path1/");      //不设置相当于这一行代码
		response.addCookie(cookie1);

那么,访问http://localhost:8080/user/path1/下的资源都会带这个cookie。包括子目录。比如访问http://localhost:8080/user/path1/path2/login3。也同样带这个cookie

3、Session是服务器端记录会话的状态。服务器会为每个客户端开辟一块内存用于记录客户端的状态,其标识为JSESSIONID。


		HttpSession session = request.getSession();

通过上述方法,会获得该会话的session对象,如果没有这个对象,就会创建一个session。并且会向客户端发送关于此会话的sessionid,即会自动在cookie中写入JESSIONID为名的键值对。下次客户端访问服务器(HttpSession session = request.getSession())服务器会自动从cookie中取出JESSIONID,

	 Set-Cookie: JSESSIONID=04AB4A86583A17E5B8050F2C2E5591A5;

session是一块域,可以向其写入键值对。
4、Session的生命周期默认是30分钟,但是浏览器关闭后,其Cookie就不存JSESSIONID了,所以浏览器就找不到这个session对象了(通过JSESSIONID查找)。为了浏览器关闭后还能找到上次的session,需要通过设置关于此JSESSIONID的cookie的存活时间来实现。

		for (Cookie cookie : cookies) {
			String name = cookie.getName();
			String value = cookie.getValue();
			System.out.println("cookie name:"+name+";value is:"+value);
	
			
			//session持久化
			if ("JSESSIONID".endsWith(name)) {
				
				cookie.setMaxAge(60);
				response.addCookie(cookie);
			}
		 
			
		  }

这样浏览器关闭后,在访问服务器,仍可以找到上次的session对象。

5、session对象过多,会对服务器造成压力。一种优化方法是通过配置钝化与活化的监听器HttpSessionActivationListener,来实现多久时间存放在session的对象钝化到磁盘来实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值