一、GET与POST
1.GET和POST是HTTP协议中的两种发送请求的方法。由于HTTP的底层是TCP/IP,所以GET和POST的底层都是TCP/IP,即GET和POST都是TCP连接,所以说GET和POST在本质上没有区别。
2.GET和POST的常见“区别”
(1)GET在浏览器回退时是无害的,而POST会再次提交请求;
(2)GET产生的URL地址可以被Bookmark(添加书签),而POST不可以;
(3)GET请求会被浏览器主动cache(缓存),而post不会(除非手动设置);
(4)GET请求只能进行URL编码,而post支持多种编码方式;
(5)GET请求的参数会被完整的保留在浏览器的历史记录中,而post中的参数不会被保留;
(6)理论上:GET请求中传送的参数是有长度限制的,而post中的参数则没有长度限制;
由于过多的数据会给浏览器和服务器带来很大的负担,所以大多数的浏览器通常都会对URL的长度进行限制,
①大多数的浏览器会将URL的程度限制在2K字节,②大多数的服务器最多处理64K大小的URL。
由于http协议的规定和浏览器及服务器的限制,导致GET和POST在应用过程中体现出一些不同。
(7)在参数的数据类型方面,GET只接收ASCII字符,而POST的参数的数据类型则没有;
(8)由于GET请求中的参数是直接暴露在地址栏中,所以一般来说不使用GET请求来传递敏感信息;
(9)GET请求的参数通过URL传递,post的参数(如果有)则在Request Body(请求体、实体内容)中。
(10)GET和POST还有一个重大的区别:
① GET产生一个TCP数据包;
对于GET方式的请求,浏览器会把http header和data一起发送出去,服务器响应200(返回数据)
②POST会产生两个TCP数据包;
对于POST方式的请求,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 OK(返回数据)。
二、Session
1.session,会话控制,Session 对象存储特定用户会话所需的属性及配置信息。
2.session的创建与使用
(1)服务器可以为客户端创建并维护一个Session对象,用于存放数据。
(2)在创建Session对象的同时,服务器将会为该 Session对象产生一个唯一编号,这个编号称之为SessionID
服务器以Cookie的方式将SessionID存放在客户端,如JSESSIONID。
(3)当浏览器再次访问该服务器时,会将SessionID作为Cookie信息带到服务器,服务器可以通过该SessionID检索到以前 的Session对象,并对其进行访问。
即:1:发送请求
2:服务器端创建session对象
3:发送保存了JSessionId的cookie存储于客户端
4:再次请求的时候就携带了JSessionId
5:通过令牌sessionId找到相对应的session
3.session的常用方法
(1) setAttribute(java.lang.String, java.lang.Object):在Session对象中用一个名字绑定一个对象。
(2) getAttribute(java.lang.String):通过名字获取Session对象中保存的对象。
(3) removeAttribute(java.lang.String):在Session中删除与一个名字对应的对象。
(4) getCreationTime():返回第一次创建会话的时间。
(5) getLastAccessedTime():返回容器最后一次得到该会话ID的请求时间。
(6) setMaxInactiveInterval(int interval):对于会话指定客户请求的最大间隔时间,以秒为单位,-1表示永不过期。
(7) getMaxInactiveInterval(int interval):返回客户请求的最大间隔时间。
(8) invalidate():会话结束,当前存在在会话中的所有会话属性也会解除绑定。
(9) getId():此方法返回每个session唯一的标识。
4.session的失效情况(销毁session的几种方式)
(1)设置会话超时,setMaxInactiveInterval()方法
(2)在Session对象上调用invalidate()方法
(3)服务器重启或关闭
5.设置会话超时的几种方法
(1)在Servlet中通过代码设置,单位为秒,如:
mySession.setMaxInactiveInterval(60*60*24);
(2)在项目中的 web.xml 文件中配置,单位为分钟
<session-config>
<session-timeout>15</session-timeout>
</session-config>
(3)【默认】在Tomcat服务器的的 /config/web.xml 文件中配置,单位为分钟
<session-config>
<session-timeout>30</session-timeout>
</session-config>
说明:优先级为: (1)>(2)>(3),如果有多个配置,则优先级大的生效