JSP总结-会话跟踪全解

 一、什么是会话?

答:一个客户端与服务端不中断的请求响应序列。

 

二、什么是会话跟踪?为什么要进行会话跟踪?

答:对客户端与服务端进行会话的监视。由于浏览器与web服务器之间是使用http协议进行通信,它是无状态的协议。当某个用户发出页面请求时,web服务器只是进行简单的响应,然后关闭与该用户的连接。因此,当一个请求发送到web服务器时,无论其是否为第一次来访,服务器都会把它当作第一次对待。因此就需要会话跟踪技术来判断是否为同一个用户。

 

三、会话跟踪的四大技术详解。

1、url传递参数

      url可以在后面附加参数,和服务器请求一起发送

        url?参数名=参数值&参数名=参数值

2、隐藏表单域

      <input type="hidden" name="userid" value="<%=userid%>"/>

      提交表单时加入这个语句,将需要传递的内容和表单post请求一起传递过去。

3、cookie

   3.1  cookie是一种web服务器通过浏览器在访问者的硬盘上存储信息的手段。

     cookie实质上是服务端与客户端之间传送的普通http头,可以保存也可以不保存在客户的硬盘上。如果保存,每个文件大小不超过4KB的文本文件,多个cookie可保存到同一个文件中。

3.2 永久性cookie:以文件的形式保存在浏览器的临时文件夹中 

                              设置了有效时间就是永久性的 。              

      临时性cookie:只是保存在浏览器的缓存中

                              当客户端关闭之后,cookie就没有了。

 

3.3在jsp中使用cookie

      ①创建cookie

            cookie是由Javax.servlet.http.Cookie类所衍生出来的对象,建立Cookie的语法如下:

             Cookie   objCookie = new Cookie(index value,String value);           

      ②写cookie

              对cookie进行操作首先是将Cookie保存到客户端

              即response.addCookie(objCookie);

      ③读cookie

               将Cookie保存到客户端就是为了以后得到其中保存的数据。

               Cookie[] 数组变量名 = request.getCookies();

               在客户端传来的Cookie数据类型都是数组类型,因此要得到其中某一项指定的Cookie对象,需要遍历数组来找。JSP将调用request.getCookies()从客户端读入Cookie,getCookies()方法返回一个HTTP请求头中的内容对应的Cookie对象数组。用户只需要用循环访问该数组的各个元素,调用getName()方法检查各个Cookie的名字,直到找到目标Cookie,然后对该Cookie调用getValue()方法取得与指定名字关联的值。代码如下:

JSP总结-会话跟踪全解_第1张图片
       

         ④设置Cookie的存在期限

             Cookie在生成时会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。在默认情况下,Cookie是随着用户关闭浏览器而自动消失的,不过Cookie可以设置其存在的期限,让用户下次在打开网页时,服务器端仍然能够取得同样一个Cookie中的数据内容。

 
JSP总结-会话跟踪全解_第2张图片
 
           ⑤删除Cookie
               要删除某一个客户端的Cookie,必须使用前面的setMaxAge()方法,并将Cookie的存在期限设为0



 

         ⑥

         同一台机器的不同客户端都可以访问服务器保存在本地机器的Cookie。新开启的页面中未保存JSESSIONID的信息。

         jsessionid是客户端用来保存session的变量,对于web应用来说,客户端变量都会保存在Cookie中,jsessionid也不例外。不过与一般的Cookie变量不同,jsessionid是保存在内存Cookie中的,在一般的Cookie文件中看不到。内存Cookie在打开一个浏览器窗口的时候会创建,在关闭这个浏览器窗口的时候同时销毁。这就解释了为什么session变量不能跨窗口使用,要跨窗口使用就需要手动把jsessionid保存到Cookie里面。

           只有jsessionid才能使session机制起作用,而jsessionid又是通过Cookie来保存的。如果用户禁用了Cookie,可以通过url重写来实现jsessionid的传递。

 

注意:jsessionid与一般的url参数传递方式是不同的,不是作为参数跟在“?”后面,而是紧跟在url后面用“;”来隔开。

4、session

          4.1session的概念:session是类javax.servlet.Httpsession的一个对象。是从客户端连接服务端开始,直到与服务器断开连接为止,用于保存每个与服务器建立连接的客户端信息。session的ID存在于客户端的cookie中。

 

        4.2session的创建:session存在于服务端。当一个客户首次访问服务器上的一个JSP页面时,JSP引擎自动产生一个session对象,同时分配一个String 类型的ID号,jsp引擎同时将这个ID号发送到客户端,存在cookie中,这样session对象和客户之间就建立了一一对应的关系。当客户再访问连接该服务器的其他页面时,不再分配给客户新的session对象,直到客户关闭浏览器后,服务器端该客户的session对象才取消,并且和客户的会话对应关系消失。当客户重新打开浏览器再连接到该服务器时,服务器为该客户再创建一个新的session对象。每生成一个session对象,服务器都会给它一个编号,并且该编号不会重复,这样服务器才能根据编号来识别session,并且正确的处理某一特定的session及其提供的服务。

     

        4.3session的失效情况:①关闭浏览器

                                                 ②关闭服务器

                                                 ③用户未向服务器提出请求超过预设时间

                                                 ④运行程序结束session(invalidate()方法)

             由于关闭浏览器不会导致session被删除,所以设置了session失效时间,一般为30分钟。

        4.4session的一些方法

             

 

     4.5session原理:当客户端用户访问时,服务器都为每个用户分配一个唯一的会话ID(session ID)保存在服务器内存中,服务器响应客户端时,将session ID写入浏览器缓存中,当下次客户端请求时,就会将该session ID携带至服务器,服务器再根据ID比对,识别不同客户端请求,以此方式来不断维持服务器和客户端状态跟踪

 

四、session和cookie的区别:

1、session存在于服务端,cookie存在于客户。

2、session比cookie安全。

3、cookie只能传输字符数据,字符是通过加密后写到客户端,下次请求时携带至服务器端,cookie携带的数据大小不能超过4KB,数据一般通过加密后存储在客户端。

     session在服务器端和浏览器缓存中都保存ID 的值,通过此值来识别唯一的客户端。session对数据存储大小没有限制,但存储的信息加重服务器的负载。另外session在分布式服务器的使用上也有限制,session 无法跨域,也就是多台服务器无法共享会话。

你可能感兴趣的:(jsp)