Session和Cookie


/*
*作者:呆萌老师
*☑csdn认证讲师
*☑51cto高级讲师
*☑腾讯课堂认证讲师
*☑网易云课堂认证讲师
*☑华为开发者学堂认证讲师
*☑爱奇艺千人名师计划成员
*在这里给大家分享技术、知识和生活
*各种干货,记得关注哦!
*vx:it_daimeng
*/
点击并拖拽以移动

  

 

为什么要用sessioncookie?

因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,也不知道是不是同一个客户端,所以需要会话技术识别不同的客户端以及客户端的在线状态。而会话技术可以帮助服务器记住客户端状态以及区分客户端

 

什么是会话?

   一次会话指的是:就好比打电话,A给B打电话,接通之后,会话开始,直到挂断电话,该次会话就结束了,而浏览器访问服务器,就跟打电话一样,浏览器A给服务器发送请求,访问web程序,该次会话就已经接通,其中不管浏览器发送多少请求(就相当于接通电话后说话一样),都视为一次会话,直到浏览器关闭,本次会话结束。其中注意,一个浏览器就相当于一部电话,如果使用火狐浏览器,访问服务器,就是一次会话了,然后打开google浏览器,访问服务器,这是另一个会话,虽然是在同一台电脑,同一个用户在访问,但是,这是两次不同的会话。

 

有哪些会话技术?

会话技术分为Cookie和Session:

Cookie:Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

 

Session: 首先浏览器请求服务器访问web站点时,程序需要为客户端的请求创建一个session的时候,服务器首先会检查这个客户端请求是否已经包含了一个session标识、称为SESSIONID,如果已经包含了一个sessionid则说明以前已经为此客户端创建过session,服务器就按照sessionid把这个session检索出来使用,如果客户端请求不包含session id,则服务器为此客户端创建一个session并且生成一个与此session相关联的session id,sessionid 的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个sessionid将在本次响应中返回到客户端保存,保存这个sessionid的方式就可以是cookie,这样在交互的过程中,浏览器可以自动的按照规则把这个标识发回给服务器,服务器根据这个sessionid就可以找得到对应的session

 

 

Cookie:

一、工作流程:

1. servlet创建cookie,保存少量数据,发送浏览器。

2. 浏览器获得服务器发送的cookie数据,将自动的保存到浏览器端。

3. 下次访问时,浏览器将自动携带cookie数据发送给服务器。

二、cookie操作

1.创建cookie:new Cookie(name,value)

2.发送cookie到浏览器:HttpServletResponse.addCookie(Cookie)

3.servlet接收cookie:HttpServletRequest.getCookies()  浏览器发送的所有cookie

 三、cookie特点

编辑

 

    cookie 不安全,可能泄露用户信息。浏览器支持禁用cookie操作。

 四、使用场景:

 1.cookie能使站点跟踪特定访问者的访问次数,最后访问时间和访问者进入站点的路径

 2.cookie 能告诉在线广告商广告被点击的次数,从而可以更精确的投放广告

 3.cookie有效期限未到时,cookie能使用户在不键入密码和用户名的情况下进入曾经浏览过的一些站点,即自动登录。

 4.cookie能帮助站点统计用户个人资料以实现各种各样的个性化服务

 

 

Session:

 

 session的生命周期:

     session在用户第一次访问服务器的时候自动创建。需要注意只是访问jsp servlet等程序时才会创建session 只访问html等静态页面时不会创建。如果尚未生成session 也可以使用request.getSession()强制生成session

     session生成后,只要用户继续访问,服务器就会更新session的最后访问时间,并维护该session 用户每访问服务器一次,无论是否读写session 服务器都认为该用户活跃了一次

    常常听到这样一种误解“只要关闭浏览器,session就消失了”。其实可以想象一下会员卡的例子,除非顾客主动对店家提出销卡,否则店家绝对不会轻易删除顾客的资料。对session来说也是一样的,除非程序通知服务器删除一个session,否则服务器会一直保留,程序一般都是在用户做log off的时候发个指令去删除session。然而浏览器从来不会主动在关闭之前通知服务器它将要关闭,因此服务器根本不会有机会知道浏览器已经关闭,之所以会有这种错觉,是大部分session机制都使用会话cookie来保存session id,而关闭浏览器后这个session id就消失了,再次连接服务器时也就无法找到原来的session。如果服务器设置的cookie被保存到硬盘上,或者使用某种手段改写浏览器发出的HTTP请求头,把原来的session id发送给服务器,则再次打开浏览器仍然能够找到原来的session 

恰恰是由于关闭浏览器不会导致session被删除,迫使服务器为seesion设置了一个失效时间,一般是30分钟,当距离客户端上一次使用session的时间超过这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把session删除以节省存储空间

 

session什么时候销毁:

1.30分钟无使用自然结束(默认30分钟,可以通过setMaxInactiveInterval())

2.手动杀死(invalidate())

3.服务器非自然关机,session会被干掉(自然关机的话 session被钝化到硬盘)

 

Session的使用:

  存session

   1.

     //1.创建session对象

            HttpSession session = request.getSession();

           

            //2.存放数据

            session.setAttribute("name", "I Love Java");



                //设置session的时间

     session.setMaxInactiveInterval(180); //秒

     

            //获取id

            response.getWriter().println(session.getId());



  2.

    //1.创建Session

            HttpSession session=request.getSession();

            session.setAttribute("name", new Date().toLocaleString());

           

            //2.设置客户端cookie的有效期

            Cookie cookie = new Cookie("JSESSIONID",session.getId());

            cookie.setMaxAge(30*24*60*60);

            cookie.setPath("/day08");

           

            response.addCookie(cookie);

           

            //销毁session数据

            session.invalidate();

           

            //删除session中的数据

            //session.removeAttribute(arg0)

           

            //session是否刚创建

            //session.isNew()



读session

//1. 获取session

      HttpSession session =request.getSession();

           

      //2.获取session数据

      String name = (String)session.getAttribute("name");

      response.getWriter().println(name);

  

 

 

将session的数据保存一个月?

            1.设置sessionid保存在客户端cookie中的有效期

            2.设置服务器端session空间的 有效期

                  在web.xml文件中进行配置:单位是分钟

                    <session-config>

                      <session-timeout>60</session-timeout>

                   </session-config>

 

 


posted @ 2022-08-16 21:59  呆萌老师  阅读(22)  评论(0编辑  收藏  举报