HTTP---会话机制Session

那么有了cookie,为什么还要有session呢?
cookie是存在于客户端的,将用户详细信息通过网络发送到客户端保存是极不安全的;
cookie大小不能超过4k,限制cookie不能满足存储用户信息的需求。
2.Session会话机制
2.1.Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上
2.2.存在服务器的一种用来存放用户数据的类ConcurrentHashMap结构
2.3.Session的实现方式和Cookie有一定关系
2.3.1.建立一个连接就生成一个session id,打开几个页面就好几个了,这里就用到了Cookie,
2.3.2.把session id存在Cookie中,每次访问的时候将Session id带过去就可以识别了.
2.3.3.即使cookie被禁用,session仍然可以通过URL重定向方式获取存储数据
2.3.4.如果禁用了cookie而又不采用url重写的话,session是无法保持的
2.4.Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象

 session实现原理:
  1.服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机
  2.只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号去
  3.服务器发现客户机浏览器带session id过来了,就会使用内存中与之对应的session为之服务
session应用代码示例:
     response.setCharacterEncoding("UTF=8");
     response.setContentType("text/html;charset=UTF-8");
      //使用request对象的getSession()获取session,如果session不存在则创建一个
     HttpSession session = request.getSession();
     //将数据存储到session中
     session.setAttribute("data", "张三");
     //获取session的Id
     String sessionId = session.getId();
     //判断session是不是新创建的
     if (session.isNew()) {
         response.getWriter().print("session创建成功,session的id是:"+sessionId);
     }else {
         response.getWriter().print("服务器已经存在该session了,session的id是:"+sessionId);
     }
     //手工调用session.invalidate方法,摧毁session
      session.invalidate();
 当session创建成功后,之所以能获取到sessionId = session.getId(),是因为request.getSession()方法中封装了一个方法,示例如下:
     //获取session的Id 
     String sessionId = session.getId();
     //将session的Id存储到名字为JSESSIONID的cookie中
     Cookie cookie = new Cookie("JSESSIONID", sessionId);
     //设置cookie的有效路径 
     cookie.setPath(request.getContextPath());
     response.addCookie(cookie);         

2.5.由于Cookie与Session实现手段不同,因此也各有优缺点和各自的应用场景:

1. 应用场景:
     (1)Cookie:用户的账户信息通过cookie的形式保存在客户端,当用户再次请求匹配的URL的时候,账户信息会被传送到服务端,交由相应的程序完成自动登录等功能
     (2)Session:用户登录某网站之后,将其登录信息放入session,以后每次请求中查询相应的登录信息以确保该用户合法(购物车等经典场景)
2. 安全性:
     (1)Cookie:将信息保存在客户端,如果不进行加密的话,无疑会暴露一些隐私信息,安全性很差
     (2)Session:安全性方面比较突出的是存在会话劫持的问题,这是一种安全威胁,总体来讲,session的安全性要高于cookie
3.性能:
     (1)Cookie:存储在客户端,消耗的是客户端的I/O和内存,很好地分散了资源消耗
     (2)Session:存储在服务端,消耗的是服务端的资源,对服务器造成的压力比较集中
     (3)cookie是要优于session的
3. 时效性:
     (1)Cookie:可以通过设置有效期使其较长时间内存在于客户端
     (2)Session:一般只有比较短的有效期(用户主动销毁session或关闭浏览器后引发超时,默认30分钟)
4.其他:
     (1)Cookie:开发中没有session方便,而且cookie在客户端是有数量和大小的限制的
     (2)Session;大小只以硬件为限制,能存储的数据无疑大了太多

猜你喜欢

转载自blog.csdn.net/qq591009234/article/details/89456463
今日推荐