servlet中的Cookie和Session

servlet中的Cookie和Session

1.Cookie

  1. 从打开浏览器,然后浏览一些网页 ,最后关闭浏览器 的过程这叫做一个会话

  2. 做到有状态

    -----会用到我们的cookie和session技术

  3. Cookie是驻留在客户端(浏览器)的一个文本文件;可以在浏览器的缓存目录中找到

  4. Cookie作用:在客户端保存用户相关的简单信息(如果需要将一个文本文件保留在浏览器/客户端)

  5. 浏览器的缓存:浏览器会把某些我们访问过的页面或者文件保存在本地,这个文件就叫缓存。

Cookie也是一个缓存

  • 缓存清除了,cookie也就不在了
  • 如果浏览器清除了缓存,则cookie文件就删除了

创建Cookie的格式
Cookie cookie=new Cookie(“key”,“value”);
set/getName() //获取key
set/getValue()
set/getMaxAge() 失效时间 单位秒

浏览器会自动将Cookie传递过来

案例代码展示:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//浏览器提交请求会自动把Cookie传递到我们的服务器
		//获取Cookie
		
		Cookie[] cooks = request.getCookies();
		for (Cookie cookie : cooks) {
			System.out.println(cookie.getName() +" "+URLDecoder.decode(cookie.getValue(),"utf-8"));
		}
		
		//Cookie是一个键值对
		Cookie c= new Cookie("name","aaa");
		//设置保存时间 (默认的保留时间是一个会话)
		c.setMaxAge(3600);//时间单位为int,表示秒 ,时间单位为long,表示毫秒
		
		
		//--只是创建cookie,还需要通过response的addCookie添加到客户端
		response.addCookie(c);
		
		//Cookie不支持直接保存中文,如果要存中文,创建cookie时需要对它进行编码,获取cookie时需要对它解码
		//对字符串进行编码   URLEncoder.encoder(s);
		//对字符串进行解码 URLDecoder.decoder(s);
		
	}

//创建Cookie:
//Cookie是一个键值对
Cookie c = new Cookie(“name”, URLEncoder.encode(“中文”,“utf-8”));
//设置保存时间 (默认的保留时间是一个会话)
c.setMaxAge(3600);//时间单位为int,表示秒 ,时间单位为long,表示毫秒
//–只是创建cookie,还需要通过response的addCookie添加到客户端
response.addCookie©;

//Cookie不支持直接保存中文,如果要存中文,创建cookie时需要对它进行编码,获取cookie时需要对它解码
//对字符串进行编码 URLEncoder.encoder(s);
//对字符串进行解码 URLDecoder.decoder(s);

2.session
Session是服务器端端一块存储空间,类似于一个map结构。(键值对)
作用:可以用来保留一些用户的登录信息。(放用户名,用户id)
如何获得session:
过程:
(1)浏览器—>服务器:当我们第一次访问某个servlet的时候,服务器会生成一个叫做JSESSIONID的id
(2)生成id以后,response.addCookie()添加到浏览器
(3)浏览器就会有一个叫做JSESSIONID的cookie

以后每次访问,浏览器会自动携带这个id
每次会话的id是不一样的,服务器就能区分是谁在访问了

ServletContext 可以存放一些项目的公用信息
有的时候需要存信息,一般情况用时间短的,request

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//每次创建一个新的setlvet  需要重启一下服务器
		
		//session 是服务器端的一块存储空间  是一个map结构 
		//作用是 保存用户登录信息 
		
		//获取session对象 request.getSession()
		HttpSession session= request.getSession();
		
		//设置值 
		session.setAttribute("name", "gok");
		session.setAttribute("UserInf", "gok1");
		//和获取值 
		System.out.println(session.getAttribute("name"));
		
		//移除属性
 
		session.removeAttribute("name");
		
		//销毁session 这个对象就没了   
  //【默认session生命周期是30分钟 这个时间是可以改的 在web.xml 】
		// <session-config>
		// <session-timeout>100</session-timeout>
		// </session-config>
          //销毁session 
	 //	session.invalidate(); 
		response.getWriter().println("中文1111但是撒多撒");

		
	}

cookie和session的理解

1.必须要知道的几点

  • ①cookie和session功能就是存储数据。cookie存储形式更单一 :
    以键值对(key:value)的形式存储。session则没有固定的结构(可以文件实现,数据库实现,等等)。通常也可以是键值对。

  • ②cookie和session两者存在的位置不同,cookie是在浏览器内的。而session存在于服务器上。

  • ③在你访问百度时,浏览器会把属于www.baidu.com这个网站的cookie,放在http数据包中带给服务器。

  • ④cookie和session都有有效时间,每次的使用会加满有效时间,长期不使用就过期咯。

2.cookie和session常用于把http协议变得“有状态”

①HTTP协议无状态的意思,例如,A用户访问网页,向服务器发送请求A。B用户访问网页,向服务器发送请求B。服务器并不能知道A请求和B请求分别是谁发出来的。(服务员也是这样,一天服务那么多人,服务完之后,哪还记得你是谁)

②怎么让服务器认识你呢?有下列的方式。

  • Ⅰ.cookie不是会带给服务器么。那我把我的支付宝账号和密码存储在Cookie里面,然后带给服务器,服务器不就认识我了么?是的,是会认识你。这样黑客也会想认识你,cookie本身是不安全的。所以,账号密码存储在cookie中显然不是明智的做法,黑客很容易从你的浏览器中盗取到你的cookie。

  • Ⅱ.账号密码存在cookie不安全,那我登陆的时候把账号密码发给服务器,然后,服务器把账号密码存到session的一个房间里,然后把唯一的房间号码发回给我,我把这个房间号(房间号也就是常说的session_id或者session_key)放在cookie中。是不是服务器能通过这个房间号找到我的账号和密码呢?是的,这样做到了账号密码没有存储在浏览器上,做到了信息存储安全。那黑客要是也拿着我的房间号找服务器怎么办呢。

  • Ⅲ.cookie的过期时间,能在一定程度上提高安全度。因为,解密也是需要时间的。当然也可能还不够安全。(至少长期看来是这样)

  • Ⅳ.当然有更安全的方式 : csrf-token。这个不是本文重点,想了解自行百度。(没有绝对的安全)

    ③当然cookie和session也可以用来存储其他的数据,不仅仅是账号密码。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值