关于Session的总结

Session

1. web中的会话是指一个客户端与web服务器之间连续发生的一系列请求和响应过程

2. 会话状态是指定web服务器与浏览器在会话过程中产生的状态信息

3. 一次会话可以跨越多个请求

4. 创建会话两个方法:getSession()如果没有会新建一个会话,并赋予唯一的ID,有的话就根据要求返回相匹配的会话。

5. getSession(boolean flag)用flag来指定是否有必要创建一个会话,调用getSession(false)时,若客户先前没有建立过会话,则方法将返回null

6. 结束会话:invalidate()

7. 有状态的会话是服务器能够记录客户端跟服务器会话的状态信息

8. http协议是一种无状态的协议

9. 常用的会话跟踪技术:通过cookie在请求消息中传递会话ID,它是浏览器访问资源时,有web服务器在http消息头中附带的传送给浏览器的一段数据;

在web.xml中设置会话的超时时间是在这整个项目设置的实效时间,而用setMaxInactiveInterval(int Interval)是在当前的应用中设置的超时时间。setMaxInactiveInterval设置的是当前会话的失效时间,不是整个web的时间,单位为以秒计算。如果设置的值为零或负数,则表示会话将永远不会超时。常用于设置当前会话时间

10.       服务器通过设置响应消息头的Set-Cookie域来发送Cookie。Set-Cookie:Name=value;Domain=XX;Max-age=seconds;Path=path;

Name指的是cookie名称;value指的是cookie名称的值,domain指定cookie在那个域中有效,浏览器访问这个域中所有的主机的时候,都将返回传这个cookie的信息。默认值为当前主机名;path用于指定当前应用的哪个url目录路径有效;

11.       url重写原理,讲会话id写到url末尾(如果浏览器不支持cookie就必需重写url)

12.       url重写方法:encodeURL(Stringurl)对超链接和form表单中的URL进行重写

encodeRedictURL()对要传递给sendRedirect()方法的url进行重写

总结1. 会话:Web应用中,客户端与服务器的一系列连续的请求和响应过程。

   会话状态:在会话过程中,产生的一些状态数据。

 

2. 会话状态是服务器端保存的,在JavaWeb是使用HttpSession对象,也叫会话作用域。

 

3. HttpSession接口:每一个HttSession对象都有一个惟一的标识符,会话ID。

  1) 获取: request.getSession();  //request.getSession(boolean flag);

  2) boolean isNew();  //是否为新建的会话

  3) String getId();   //会话ID

  4) long getCreationTime();  //得到会话创建的时间

  5) void setAttribute("名",Object 值);

  6) Object getAttribute("名");

  7) void removeAttribute("名");

  8) public long getLastAccessedTime(); //得到最后一次访问此会话的时间毫秒值

  9) void invalidate();   //使会话失效,会话实效不是销毁,在页面中用该方法使会话实效时,仍可通过getId()得到其id,只有再跳转到下一个页面的时候才会新生成一个session

 

4. 会话结束:

   1) 主动结束会话:HttpSession的invalidate();    //会员显式“退出”时。

   2) 自动超时结束:当两次针对HttpSession操作的时间间隔超过了默认的超时时间(30分钟)时,会话自动结束。

       在本应用的web.xml中通过30

       在Web容器中可以配置:如tomcat是在CATALINA_HOME/conf/web.xml中。

5. 会话跟踪的原理:Web服务器必须以某种方式把会话ID(jsessionid)作为响应的一部分交给客户端,而客户端必须把会话ID作为请求的一部分发回给服务器。

 

6. 会话跟踪的常用两种技术:

  1) Cookie:自动进行,无须开发人员管理。缺点: 客户端有可能会禁用Cookie。

  2) URL重写:使用response.encodeURL(Stringurl); 根据客户端是否支持Cookie来选择是否需要将会话ID添加到URL的结尾,以标识该会话

                      http://127.0.0.1:8080/webappName/xxx.do?paramName=value¶mName=value;jsessionid=xxxxxxxxxxxxxxxxxx

缺点:Web应用所有跳转的url都需要进行URL重写。

 

7. HttpSession对象的序列化问题:

为了提高服务器内存资源的利用率,Web服务器通常将那些暂时不活动但未超时的HttpSession对象持久化到磁盘文件系统中保存,一旦服务器需要使用它们时,再将它们从文件系统中装载进内存。

注意:凡是存放到HttpSession中的对象都要是可序列化的。该对象对应的类要实现Serializable接口,并且所有的属性也要可序列化。

 

8. Cookie:是在浏览器访问Web服务器的某个资源时,由Web服务器在HTTP响应消息头中附带传送给浏览器的一段数据。

浏览器可以决定是否保存这段数据。一旦浏览器保存了这段数据,那么它在以后每次访问该Web服务器时,都会在HTTP请求头中将这段数据传给Web服务器。

   1) HTTP规范中没有定义Set-Cookie消息头字段,但所有浏览器都支持Cookie的如下属性:Path=PATH;

Name :指定 Cookie的名称;

VALUE:指定 Cookie名称的值。

Domain:指定 Cookie在哪个域中有效,浏览器访问这个域中的所有主机时,都将回传这个Cookie信息。默认值为当前主机名。

Max-age: 指定Cookie 在客户端保持有效的时间(秒)

   正数——保存在客户端文件系统中。

   0——通知浏览器立即删除这个Cookie。

   负数——在浏览器关闭时删除这个Cookie。保存在浏览器进程对应的内存空间中,也叫内存Cookie。和没有设置Max-Age效果相同。

Path:用于指定Cookie对服务器上的哪个URL目录和其子目录有效。

 

   2)Servlet API中提供了一个javax.servlet.http.Cookie类来代表Cookie:

       a) 服务器端Servlet发送Cookie到客户端:使用HttpServletResponse提供的void addCookie(Cookie)方法

    一个servlet/jsp设置的cookies能够被同一个路径下面或者子路径下面的servlet/jsp读到。

       b) 客户端发送Cookie到服务器端: 自动发送

       c) 服务器端获取客户端发送的Cookie:HttpServletRequest提供Cookie[] getCookies()方法来获取取客户端发送所有Cookie

你可能感兴趣的:(小脑袋小灵光)