session与cookie的区别

Cookie与Session的区别

  • 为何要使用Cookie和Session?HTTP协议是无状态连接。在一次回话(打开浏览器访问一个站点中的不一样内容直到浏览器关闭称为一次回话)中,屡次请求没法共享数据,没法跟踪用户的行为。

解决方案:web

1.在URL地址栏拼接参数,可是不安全(`www.xxx.do?userId=1`)
2.使用Cookie
3.使用Session
复制代码

Cookie

Cookie是客户端技术,全部的浏览器都支持Cookie缓存,Cookie数据存放的位置位于客户端的内存中,也能够调整Cookie存放与磁盘中。跨域

步骤:浏览器

1.用户请求一个支持Cookie的后台服务器缓存

2.服务器作请求处理,返回相应信息,并设置Cookie缓存用户信息。在能够在开发者模式相应头中看到Set-Cookie看到Cookie中的数据,在后续的请求都会自动发送Cookie到服务器,直到Cookie销毁或过时。tomcat

3.客户端再次请求,在请求头中携带Cookie。安全

4.服务器接收到请求数据,并解析Cookie内容,作出请求相应。服务器

Cookie分为会话Cookie和持久化Cookie。会话Cookie存放与客户端的内存中,浏览器关闭后Cookie自动销毁;持久化Cookie存放于磁盘中,浏览器关闭后不会销毁Cookie。能够经过cookie.setMaxAge(value);来设置Cookie的存活时间。cookie.setMaxAge(0);表示删除Cookie,cookie.setMaxAge(value<0);表示会话Cookie;cookie.setMaxAge(value>0);指定描述,能够用于设置持久化Cookie。cookie

设置Cookie的做用域session

Cookie中的字段中有两个能够设置Cookie的做用域。Path设置Cookie的有效URL路径,Domain指定Cookie的有效域。网站

cookie.setPath("/");表示Cookie的做用域为整个应用,cookie.setPath("/**");表示Cookie的做用域为**的做用范围,路径为**都能访问到Cookie,cookie.setPath("/view/a");表示路径为view/a的路径下都能访问Cookie,而view/b不能访问到Cookie。

cookie.setDomain("value");默认为web应用域名或者Ip地址。若是须要设置跨域访问:photo.google.commail.google.com实现cookie共享须要设置cookie.setDomain(".google.com");

Cookie的缺陷:

1.Cookie数据保留在请求头中,不安全。

2.Cookie数据存储中文须要转码,浏览器默认iso8859。

3.Cookie存放的数据为String类型

4.Cookie数据容量限制为4KB之内,一台服务器最多保留20个Cookie,一个客户端浏览器最多保存300个Cookie。

5.共享数据本应该放在服务器上。


Session

Session是服务端技术,利用这个技术,服务器在运行时能够为每个用户的浏览器建立一个独享的Session对象,用于Session为用户浏览器独享,因此用户在访问服务器时,能够把各自的数据放在各自的Session中,当用户再去访问服务器其余web资源时,其余web资源再从服务端的Session中获取数据。

步骤:

1.用户请求一个支持Cookie的后台服务器

2.服务器作出请求处理,建立Session对象,保存用户的相关信息,并建立Cookie对象,Cookie对象的jsessionid指向Session存放在服务器的内存地址。服务器经过相应头Set-Cookie返回给浏览器Cookie的信息(Cookie中包含Session的内存地址,Session会消耗服务器的资源),在后续的请求都会自动发送Cookie到服务器,服务器经过解析Cookie中的jsessionid来获取Session中的数据。

3.客户端再次请求,在请求头中携带Cookie。

4.服务器接收到请求数据,服务器经过解析Cookie中的jsessionid在内存中来获取Session中的数据,作出请求相应。

Session超时管理

在浏览器与服务器的会话中,若是浏览器长时间没有与服务器进行交互,服务器的Session会自动销毁(网站登入后长时间没有交互后须要再次登入),浏览器与服务器以前的交互的Session就不存在了,若是须要再次用户Session的缓存,须要再次请求服务器从新建立新的Session。若是直接关闭浏览器,Session也会自动销毁,由于Session的应用地址时保存在Cookie中的,Cookie中数据是保存在浏览器的内存中的,浏览器关闭后Cookie销毁,没法识别Session的内存地址,超时后Session会自动销毁。

设置Session失效时间的三种方式:

1.在项目中的web.xml中设置,时间表示分钟
 <session-config>
  <session-timeout>2</session-timeout>
 </session-config>

2.在tomcat的web.xml中设置,默认时30分钟
 <session-config>
    <session-timeout>30</session-timeout>
</session-config>

3.在Servlet中设置
HttpSession session = request.getSession();
session.setMaxInactiveInterval(60);//单位为秒

-----------------
优先级是就近原则:Servlet>项目中的web.xml>Tomcat中的web.xml
复制代码

URL重写

Session依托Cookie来记录Session在服务器的内存地址,可是浏览器能够设置禁用Cookie,这样浏览器请求数据的时候没法携带jsessionid致使Session在服务器中失效。可是咱们能够在地址栏手动拼接jsessionid,如localhost:8080/demo;jessionid=***,这样作很麻烦,Sun公司提供了两个方法用于在浏览器地址栏拼接jessionid

response.encodeUrl(url);response.encodeRedirectUrl(ulr);。方法会先判断浏览器是否禁用了cookie,若是禁用了cookie会在url后拼接上jessionid,若是浏览器没有禁用cookie,Session会经过请求头Cookie的jessionid来传递。

相关文章
相关标签/搜索