Cookie和session小结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Andyzhu_2005/article/details/80858862

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的对象钝化到磁盘来实现。

猜你喜欢

转载自blog.csdn.net/Andyzhu_2005/article/details/80858862