servlet-会话机制

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


会话机制

 cookie 客户端解决方案

 session服务器端解决方案

概念:

会话:1)一次会话中包含多次请求和响应

           2)一次会话中,浏览器第一次给服务器发送请求,会话建立,直到有一方断开为止

会话跟踪:  在一次会话中,让服务器识别多次的请求来自于同一浏览器客户端

 实现方式:
 

 客户端会话技术 : Cookie 

 服务端会话技术: Session

在一次会话的范围内多次请间,共享数据

功能:


 

一、Cookie

客户端会话跟踪技术,将数据保存在客户端 Cookie对象

1、使用步骤

创建Cookie对象,绑定数据

Cookie cookie=new Cookie(String name,String value);

发送cookie对象

Response.addCookie( Cookie cookie)

 获取Cookie ,拿到数据,识别身份

Cookie[] request.getCookies(); -> 在众多cookie中找到本站点发cookie

2、实现原理

基于响应头(set-cookie) 设置(cookie )和请求头(cookie) 实现

3、面试题

 1. 一次可不可以发送多个cookie

     a. 可以

     b. 可以创建多个cookie对象,只需要在response调用多次addCookie方法


2. cookie在浏览器中保存多长时间!

   a. 默认情况下,浏览器关闭,cookie中数据销毁

   b. 持久化存储 i. setMaxAge(int seconds) ->cookie存活时间


3. cookie可不可以存中文

   a. 在tomcat8之前不允许,但在tomcat8之后 可以

   b. 需要中文来进行转码 --> URL 编码 解码

   c. 不建议写中文 Cookie 小文本


4. Cookie作用和特点(背)

   a. cookie存储在客户端浏览器

   b. 浏览器对单个cookie的大小是有限制的(4KB ),对同一域名服务器来最多可以(20个)

   c. cookie中一般用于存储少量不敏感的数据

   d. 有cookie,下次可以不登录情况下,完成服务器端对客户端身份的识别(免登录 )


4、代码

设置cookie的存活时间:

//设置一个cookie
        Cookie cookie=new Cookie("name","yq78");
        //设置cookie存活过期的时间(60*60=1小时)
        //60*60*24=1天
        //60*60*24*30=1个月
        cookie.setMaxAge(60*60*24*30);
        response.addCookie(cookie);
cookie识别信息
  Cookie[] cookies=request.getCookies();
       for(Cookie cookie:cookies){
           String name= cookie.getName();
           String value= cookie.getValue();
           if(name.equals("name")&&value.equals("yq78")){
               System.out.println("已找到此网站发送cookie的值");
           }

       }

二、Session (主菜)

服务端会话技术,在一次会话中多次请求间共享数据,将数据保存在服务端对象中。 ServletAPI -》HTTPSession

1、 原理 :

 session的实现是依赖于cookie的

2、特点:

1)Session可以存储一次会话中多次请求数据,存储服务器内存

2) session可以存储任意类型数据(Object) ,任意大小的数据

3、共享对象

 获取HttpSession对象

 HttpSession session=request.getSession();

 使用HttpSession对象:

void setAtrribute(String name,Object value)

 Object getAttribute(String name)

 void removeAttribute(String name)

4、面试题:

 客户端关闭后,结束会话,服务器不关闭,两次获得session是否为同一个?

 不是


 客户端不关闭,服务器关闭,两次获得session是否为同一个?

 不是


session什么时候被销毁

 客户端关闭

 服务器端关闭

 主动销毁 :session.invalidate() 

超时,默认情况下30分钟失效


Session和cookie的区别

1. session存储数据在服务器端,Cookie在客户端

2. session没有数据大小的限制 ,Cookie有 4kb

3. session数据安全,cookie相对于不安全


Session和Requet和ServletContext对象区别(域对象),请你列举出javaWeb域对象

Request 代表一次请求(响应)

Session 代表一次会话 (多次请求和应答)

ServletContext代表一次应用 (多次会话)

ServletContext共享范围大于Session共享范围要大于Request共享范围 

(request<Session<ServletContext)

5、代码

        //获取session对象
        HttpSession session = request.getSession();
        System.out.println("JSESSIONID" + session.getId());
        //session 对象唯一,Id唯一
        //确定用户唯一性
        session.setAttribute("name", "helloSessiona");
        response.sendRedirect(request.getContextPath()+"/Session1Servlet");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值