会话跟踪Cookie与Session

会话跟踪用来跟踪用户的整个会话,常用的是Session和Cookie。Cookie通过客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。

1.Cookie 

1.1概念及使用方法

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

  java中把Cookie封装成了javax.servlet.http.Cookie类。每个Cookie都是该Cookie类的对象。服务器通过操作Coolkie类对象对客户端Cookie进行操作。通过request.getCookie()获取客户端提交的所有Cookie(Cookie[]),通过response.addCookie(Cookie cookie)向客户端设置Cookie。

  Cookie对象使用key-value属性对的形式保存用户状态,一个Cookie对象保存一个属性对,一个request或者response同时使用多个Cookie。因为Cookie类位于包javax.servlet.http.*下面,所以JSP中不需要import该类。

1.2不可跨域名性

  根据域名的不同,网站只能操作自己的Cookie,这是由客户端浏览器决定的。

1.3Unicode编码:保存中文

  使用时可以用如下语句生成Cookie  及从Cookie中取值

Cookie cookie = new Cookie(URLEncoder.encode("姓名","UTF-8"));

String cookieName=URLDecoder.decode(cokie.getName()),"UTF-8";

1.4BASE64编码:保存二进制图片

//in
byte binary;//输入流输入图片
String content = BASE64Encoder.class.newInstance().encode(binary);
Cookie cookie=new Cookie("file", content);

//out
byte[] binary=BASE64Decoder.class.newInstance().decodeBuffer(cookie.getValue(),.replace(" ",""));
response.getOutputStream().write(binary);

1.5Cookie的所有属性

1.6Cookie的有效期

  Cookie的maxAge决定着Cookie的有效期,单位为妙。Cookie中通过getMaxAge()方法与setMaxAge(int maxAge)方法来读写maxAge属性。

  如果maxAge属性为正数,则表示该Cookie会在maxAge秒之后自动失效。浏览器会将其写到对应的Cookie文件中,下面的Cookie信息将永远有效。

cookie.setMaxAge(Integer.MAX_VALUE);

  如果maxAge为负数,则表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie失效。不会被写入Cookie文件中。

1.7删除和修改

  如果maxAge为0,则表示删除该Cookie。

  response对象提供的Cookie操作方法只有一个添加操作add,要想修改Cookie只能使用一个同名的Cookie来覆盖原来的Cookie。

1.8Cookie的域名

  同一一级域名下的二级域名不可交互使用Cookie,如果想二级域名下都可以使用该Cookie,需要设置Cookie的domain参数

1.9Cookie的路径

  path属性决定允许访问Cookie的路径,path属性需要使用符号“/”结尾。

1.10JavaScript操作Cookie

  document.cookie可以获得本页面所有的Cookie,各Cookie之间用分号";"隔开。获取Cookie可以用split函数切Cookie字符串。

  设置Cookie可以直接赋值 document.cookie = name + "=" + emcodeURI(value);

2.Session

2.1概念及使用方法

  客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以。对应的类为javax.servlet.http.HttpSession。每个来访者对应一个Session对象,所有该客户的状态信息都保存在这个Session对象里。在客户端第一次请求服务器时创建。

  Servlet中必须使用request来编程式获取HttpSession对象,而JSP中内置了Session隐藏对象,可以直接使用。 request.getSession()方法获取Session,使用getAttribute(String key)和setAttribute(String key, Object value)方法来读写客户状态信息。

2.2Session的生命周期

  Session保存在服务器内存中,每个用户都会有一个独立的Session,因此Session里的信息应该尽量精简。Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。服务器会把长时间没有活跃的Session从内存删除,Session就自动失效。Session的超时时间为maxInactiveInterval属性,可以通过getMaxInativeInterval()获取,通过setMaxInactiveInterval(long interval)修改。Session的超时时间也可以在web.xml文件中修改,另外通过invalidate()方法可以使Session失效。

2.3Session的常用方法

  

2.4Session与浏览器

  Http协议是无状态的,Session不能依据Http连接来判断是否是同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id,Session依据该Cookie来识别是否为同一用户。该Cookie为服务器自动生成的,它的maxAge属性一般为-1。同一机器的两个浏览器会生成两个不同的Session,但是由浏览器窗口内的链接、脚本等打开新窗口除外。这类子窗口会共享父窗口的Cookie,因此会共享一个Session。

  如果浏览器禁用Cookie或者不支持Cookie,就需要用到URL地址重写。

  URL地址重写是对客户端不支持Cookie的解决方案。URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的ID。  

3.Cookie与Session区别

  Cookie只能保存ASCII字符串,如果需要存取Unicode字符或者二进制数据,需要进行UTF-8,GBK或者BASE64等方式编码。Cookie也不能直接存取Java对象。Session可以存取任何类型的数据。

  Session不存在敏感信息泄露的危险,如果选用Cookie,敏感信息尽量不要写到Cookie中。

  Cookie可以永久有效,Session不能实现。

  并发浏览的用户非常多时,最好使用Cookie。

  对于WAP应用, Session+URL地址重写。

  Cookie通过设置domain属性,可以实现跨域名(二级域名),Session则不会支持跨域名。

时间: 2024-10-24 10:00:16

会话跟踪Cookie与Session的相关文章

会话技术: Cookie 和 Session

会话技术 会话技术:从浏览器开始访问服务器,到关闭浏览器,这期间发生了许多次请求和响应,这个过程就叫做一次会话. Cookie 和 Session 都是处理会话技术的两种具体实现,Cookie将数据保存在客户端,Session将数据保存在服务器端. Cookie技术 1.Cookies是存储在客户机的文本文件,可以保存一系列的信息.通常服务器有三个步骤来识别不同的客户机: 服务器脚本发送一系列cookies至浏览器.比如名字,年龄,ID号码等等. 浏览器在本地机中存储这些信息. 当下一次浏览器发

2014-07-09 Java Web的学习(5)-----会话管理(Cookie和Session)

1.什么是会话 会话,牛津词典对其的解释是进行某活动连续的一段时间.从不同的层面看待会话,它有着类似但不全然相同的含义.比如,在web应用的用户看来,他打开浏览器访问一个电子商务网站,登录.并完成购物直到关闭浏览器,这是一个会话.而在web应用的开发者开来,用户登录时我需要创建一个数据结构以存储用户的登录信息,这个结构也叫做会话.因此在谈论会话的时候要注意上下文环境.而本文谈论的是一种基于HTTP协议的用以增强web应用能力的机制或者说一种方案,它不是单指某种特定的动态页面技术,而这种能力就是保

JavaEE基础(04):会话跟踪技术,Session和Cookie详解

本文源码:GitHub·点这里 || GitEE·点这里 一.会话跟踪 1.场景描述 比如登录某个购物网站,身份识别成功后,在网站下单,支付 等操作,这些操作中当前登录用户信息必须是共享的,这样这些操作结果才能和登录用户做关联. 2.概念简介 可以把会话理解为客户端与服务器之间的一次交互,在一次交互中可能会包含多次请求和响应.在JavaWeb中,从客户端向服务器发出第一个请求开始,会话就开始了,直到客户端关闭浏览器会话结束.在一个会话的多个请求中共享数据,这就是会话跟踪技术. 二.Cookie用

会话技术cookie和session详解

什么是会话 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 会话技术解决了什么问题 每个用户与服务器进行交互的过程中,各自会有一些数据,程序要想办法保存每个用户的数据. 例如:用户点击超链接通过一个servlet购买了一个商品,程序应该保存用户购买的商品,以便于用户点结帐servlet时,结帐servlet可以得到用户商品为用户结帐. 会话技术分类 会话技术会为两类 Cookie Cookie是客户端技术,程序把每个用户的数

Java web 会话技术 cookie与session

一.会话 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 会话过程中要解决的一些问题 每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,程序要想办法为每个用户保存这些数据. 二.保存会话数据的两种技术 1.Cookie Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器.当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去.这样,web资源处理的就是

会话技术cookie与session

目录 会话技术cookie 会话技术 cookie 服务器怎样把Cookie写 给客户端 服务器如何获取客户端携带的cookie session session简介 Session如何办到在一个servlet当中存数据, 如何获取Session对象 怎样向session当中存取数据 session的生命周期 JsessioID持久化 会话技术cookie 会话技术 ? 什么是会话 用户开一个浏览器 点击多个超链接,访问服务器多个web资源 然后关闭浏览器,整个过程称之为一个会话. 和打电话一样,

会话管理——cookie和session技术

1 Cookie技术 1.1 Cookie技术特点: 会话数据保存在浏览器客户端 1.2 Cookie的API Cookie类: 保存会话数据 1)创建Cookie对象,用于保存会话数据 new Cookie(java.lang.String name, java.lang.String value) 2)设置Cookie对象 void setPath(java.lang.String uri)  设置cookie有效路径 void setMaxAge(int expiry)     设置coo

JAVA基础之会话技术-Cookie及Session

至此,学习三个域对象:ServletContext(web项目).request(一次请求).Session(一个客户端)!均有相同的方法! 从用户开始打开浏览器进行操作,便开始了一次会话,直至关闭浏览器为止结束.在此过程中,每次产生请求时均会产生一次cookie,同时会产生一个JESSIONID进入到客户端进行创建内存空间,下次调用直接寻找此唯一的ID值.数据存储在两个地方均有利弊!需要注意的是,浏览器关闭,session并没有销毁! 一.会话技术简介: 1.存储客户端的状态: 因为Http协

PHP 会话控制 cookie与session 全解析

Cookie 简介 Cookie是存储在客户端浏览器中的数据,我们通过Cookie来跟踪与存储用户数据. 一般情况下,Cookie通过HTTP headers从服务端返回到客户端.多数web程序都支持Cookie的操作,因为Cookie是存在于HTTP的标头之中,所以必须在其他信息输出以前进行设置,类似于header函数的使用限制. PHP通过 setcookie 函数进行Cookie的设置,任何从浏览器发回的Cookie,PHP都会自动的将他存储在 $_COOKIE 的全局变量之中,因此我们可