会话跟踪(控制)

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是 Cookie 和 Session。

一、Cookie

Cookie 通过在客户端记录信息确定用户的身份,Session通过在服务器端记录信息确定用户身份

1、Cookie简介:

    • Cookie 意为“甜饼”,有 W3C组织提出。
    • Cookie的出现:由于HTTP协议是一种无状态的协议,服务器单从网络连接上无从知道客户身份,为了解决此问题,于是出现了Cookie
    • Cookie实际上是一小段的文本信息,客户端请求服务器,如果服务器需要记录该用户状态,就使用 response 向客户端浏览器颁发一个 Cookie,客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同Cookie一同提交给服务器,服务器会检查该Cookie,以此来辨认用户的状态。服务器还可以根据需要修改Cookie的内容

2、Cookie的有效期:

    • Cookie的 maxAge 决定着 Cookie的有效期,单位为:秒/s(Second)
      • Cookie中通过 getMaxAge() 方法和 setMaxAge(int  maxAge) 方法来读写 maxAge属性
      • 如果 maxAge 属性为正数,则表示该 Cookie会在 maxAge 秒之后自动失效。浏览器会将 maxAge 为正数的 Cookie持久化,即 写到对应的Cookie文件中。无论客户关闭了浏览器还是电脑,只要在 maxAge 秒之前,登录网站时该 Cookie仍然有效
      • 如果 maxAge 为负数,则表示该 Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该 Cookie立即失效。 maxAge 为负数的 Cookie,为临时性 Cookie,不会被持久化,也不会被写到 Cookie文件中。 Cookie 信息保存在浏览器内存中,因此关闭浏览器该 Cookie就消失了。 Cookie 默认的 maxAge 值 为 -1
      • 如果 maxAge 为 0,则表示删除该 Cookie。 Cookie机制没有提供删除 Cookie的方法,因此通过设置该 Cookie即时失效实现删除 Cookie的效果。 失效的Cookie会被浏览器从 Cookie文件或者 内存中删除

        1. //新建 Cookie对象
        2. Cookie cookie = new Cookie("userName","hello");
        3. //设置生命周期为 0, 不能为 负数
        4. cookie.setMaxAge(0);
        5. //必须执行下面这一句代码
        6. response.addCookie(cookie);
    • response 对象提供的 Cookie 操作方法只有一个添加操作  addCookie(Cookie cookie) 。想要修改 Cookie 只能使用一个同名的 Cookie来覆盖原来的Cookie,达到修改的目的。删除时是需要把 maxAge 修改为 0 即可

3、Cookie 的修改、删除:

    • Cookie 并不提供修改、删除操作,如果需要新建一个 同名的 Cookie,只需要新建一个同名的Cookie,并添加到 response 中覆盖原来的Cookie
    • 如果想要删除某个Cookie,只需要新建一个同名的Cookie,并将maxAge设置为0,并添加到response中覆盖原来的Cookie。注意:是 0 而不是 负数。负数代表其他意义
    • 注意:修改、删除Cookie时,新建的Cookie出value和maxAge之外的所有属性(name、path、domain等)都要与原Cookie完全一样,否则,浏览器会将其视为两个不同的Cookie,不会覆盖,导致修改或删除失败!

二、Session

1、Session简介:

    • Session是另一种记录客户状态的机制,不同的是 Cookie保存在浏览器中,二Session保存在服务器上。
    • 客户端浏览器访问服务器的时候,服务器吧客户端信息以某种形式记录在服务器上,这就是Session,客户端浏览器再次访问时只需要从该Session中查找客户的状态就可以了
    • 如果说 Cookie 机制是通过检查客户身上的“通行证”来确定客户的身份的话,那么 Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。
    • Session相当于程序在服务器上建立一份客户档案,客户来访时只需要查询客户档案表就可以了
    • Session对应的类为 javax.servlet.http.HttpSession类,每一个来访者对应一个Session对象,所有该客户的状态信息都保存在这个Session对象里。Session对象是在客户端第一次请求服务器的时候创建的。
    • Session是一种 key-value 的属性对。可以通过 getAttribute(String  key) 和 setAttribute(String  key,  Object  value) 方法来读写客户状态信息。在Servlet中使用request.getSession() 方法来获取该客户的Session。

      1. //获取Session对象
      2. HttpSession session = request.getSession();
      3. //设置Session中的属性
      4. session.setAttribute("loginTime", new Date());
      5. //获取session属性
      6. out.println("登录时间为:" + (Date)session.getAttribute("loginTime"));
    • request 还可以使用 getSession(boolean  create) 来获取session。
      • 当 create 为 true 时,当客户端的Session不存在,则会先创建Session对象然后再将其返回

2、Session的生命周期:

    • Session通过调用 invalidate() 方法来使Session对象失效
    • HttpSession的常用方法:
      • void  setAttribute(String  key, Object  value):设置Session属性
      • String  getAttribute(String  key):返回Session属性
      • Enumeration  getAttributeNames():返回Session中存在的属性名
      • void  removeAttribute(String  key): 移除Session属性
      • String  getId():返回Session的 ID,该ID由服务器自动创建,不会重复
      • long  getCreationTime(): 返回Session的创建日期,返回类型为long,常被转换为Date类型。 eg: Date  createTime  =  new  Date(session.getCreationTime())
      • long  getLastAccessedTime(): 返回Session的最后活跃时间,返回类型为long
      • int  getMaxInactiveInterval():返回Session的超时时间,单位为:秒;超过该时间没有访问,服务器会认为该Session失效
      • void  setMaxInactiveInterval(int  second): 设置Session的超时时间,单位为:秒
      • boolean  isNew():返回该Session是否是新创建的
      • void  invalidate():使该 Session 失效
      • 小提示:Tomcat中Session的默认失效时间为 20 分钟,可通过 setMaxInactiveInterval(int  seconds) 修改超时时间。可以修改 web.xml 改变Session的默认超时时间:

        1. <session-config>
        2. <!-- 此处的单位为:分钟 -->
        3. <session-timeout>60</session-timeout>
        4. </session-config>

3、URL地址重写

    • 当客户端浏览器将 Cookie功能禁用或者不支持Cookie时,Java Web 提供了另一种解决方案: URL地址重写
    • 原理:将该用户Session的id信息重写到URL地址中,服务器能够解析重写后的URL获取Session的id。这样即使客户端浏览器不支持 Cookie,也可以使用Session来记录用户的状态
    • HttpServletResponse类提供了 encodeURL(String  url):实现URL地址重写

4、Session中禁止使用 Cookie

    • 方式一:找到项目中的 META-INF 目录(与WEB-INF同级,如果没有则自己新建一                        个),新建一个 context.xml 文件(如果有就打开编辑):编辑内容为:

      1. <?xml version=‘1.0‘ encoding=‘UTF-8‘ ?>
      2. <Context path="/项目名称" cookies="false"> </Context>
    • 方式二:修改Tomcat全局的 conf/context.xml 文件:

      1. <Context cookies="false">
      2. </Context>
    • 注意:该配置只是禁止Session使用Cookie作为识别标志,并不能阻止其他的Cookie读写,也就是说服务器不会自动维护名为 JSESSIONID 的Cookie了,但程序中仍然可以读写其他的Cookie
时间: 2024-12-25 01:53:24

会话跟踪(控制)的相关文章

2.会话跟踪技术

1.什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器了.从双方接通电话那一刻起,会话就开始了,到某一方挂断电话表示会话结束.在通话过程中,你会向10086发出多个请求,那么这多个请求都在一个会话中. 在JavaWeb中,客户向某一服务器发出第一个请求开始,会话就开始了,直到客户关闭了浏览器会话结束. 在一个会话的多个请求中共享数据,这就是会

会话跟踪session cookie

会话跟踪 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. 理论是,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个会话,二者不能混淆.而Web应用程序是使用HTTP协议传输数据的.HTTP协议是无状态的协议.一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接.

PHP会话跟踪一(41)

PHP会话跟踪 什么是会话控制 我们需要一种强有力的解决方案,为了使得网站可以跟踪客户端与服务器之间的交互,保存和记忆每个用户的身份和信息,这样就产生了会话控制.??什么是会话控制:??HTTP是一个无状态的协议,此协议无法来维护两个事务之间的联系.??当一个用户请求一个页面后再请求另外一个页面时,HTTP无法告诉我们这两个请求是来自同一个人.??会话控制思想就是能够在网站中跟踪一个变量,我们可以跟踪变量,就可以做到对用户的支持,并根据授权和用户身份显示不同内容,不同页面. 会话跟踪技术 隐藏表

Servlet - 会话跟踪

会话跟踪 标签 : Java与Web 会话跟踪 HTTP本身是"无状态"协议,它不保存连接交互信息,一次响应完成之后即连接断开,下一次请求需要重新建立连接,服务器不记录上次连接的内容.因此如果判断两次连接是否是同一用户, 就需要使用会话跟踪技术来解决.常见的会话跟踪技术有如下几种: URL重写: 在URL结尾附加会话ID标识,服务器通过会话ID识别不同用户. 隐藏表单域: 将会话ID埋入HTML表单隐藏域提交到服务端(会话ID不在浏览器页面显示). Cookie: 第一次请求时服务器主

四种会话跟踪方法

前段时间看到web中会话跟踪技术,经过收集并整理将学习结果记录在此. 1.什么是会话 客户端打开与服务器的连接发出请求到服务器响应客户端请求的全过程称之为会话 . 2.什么是会话跟踪 对同一个用户对服务器的连续的请求和接受响应的监视 . 3.为什么需要会话跟踪 浏览器与服务器之间的通信是通过HTTP协议进行通信的,而HTTP协议是"无状态"的协议,它不能保存客户的信息,即一次响应完成之后连接就断开了,下一次的请求需要重新连接,这样就需要判断是否是同一个用户,所以才应会话跟踪技术来实现这

04-cookies 会话跟踪技术

1.会话跟踪技术 1.Http协议的无状态保存 会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应 2 .会话路径技术使用Cookie或session完成 我们知道HTTP协议是无状态协议,也就是说每个请求都是独立的!无法记录前一次请求的状态. 但HTTP协议中可以使用Cookie来完成会话跟踪!在Web开发中,使用session来完成会话跟踪,session底层依赖Cookie技术. 2.cookie简介 1.什么叫Cookie Cookie翻译成中文是小甜点,小饼干

{Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session

本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 xxx 八 xxx 一 会话跟踪 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器了.从双方接通电话那一刻起,会话就开始了,到某一方挂断电话表示会话结束.在通话过程中,你会向10086发出多个请求,那么这多个请

JavaWeb会话跟踪

cookie和session是常用的会话跟踪技术 cookie机制 1.web应用程序是使用HTTP协议传输数据的,HTTP协议是无状态的协议,一旦数据交换完毕就会关闭链接.Cookie可以弥补HTTP协议无状态的不足. 位于:javax.servlet.http.Cookie 2.Cookie具有不可跨域名性.Cookie的管理是浏览器,浏览器判断一个网站是否能操作另一个网站的Cookie的依据是域名.例:images.baidu.com与www.baidu.com不是同一个域名,cookie

WEB中会话跟踪[转]

今天晚上去华工参加睿智融科的笔试,问到web会话跟踪,一脸懵比,这个词听都没听过,回来后百度下,发现其实会话跟踪的内容我基本都了解的~_~ 转自:http://www.cnblogs.com/gaopeng527/p/5246708.html 一.     什么叫会话跟踪 记录用户一段时间内的逻辑上相关联的不同访问请求个过程叫"会话跟踪".通过用户在每次对服务请求时的唯一标识,可以跟踪会话. 二.     会话跟踪产生的原因 我们都知道Internet通信协议可以分为有状态协议和无状态