会话跟踪

#HttpSession

##会话跟踪

为什么需要会话跟踪?

  • HTTP协议是一种无状态的协议(一般情况下,在响应客户后就与客户断开连接)
  • 需要对用户在访问同一web应用(** 一个用户访问一个web容器或服务器会产生一个会话对象 **)时对用户进行跟踪(如: 是否登录等)

HttpSession

:在创建了Session的同时,服务器会为该Session生成唯一的Session id,而这个Session id在随后的请求中会被用来重新获得已经创建的Session;在Session被创建之后,就可以调用Session相关的方法往Session中增加内容了,而这些内容只会保存在服务器中,发到客户端的只有Session id;当客户端再次发送请求的时候,会将这个Session id带上,服务器接受到请求之后就会依据Session id找到相应的Session,从而再次使用之。正式这样一个过程,用户的状态也就得以保持了。(Session ID是通过Cookie来传递的,服务器端获取Session对象依赖于客户端携带的Cookie中的JSESSIONID数据

  • HttpSession是java web对用户进行会话跟踪的一个** 接口 **
  • HttpSession由Servlet容器的提供者实现
  • HttpSession通过** HttpServletRequest **的getSession()或者getSession(Boolean)方法获取
  • getSession()如果会话没有被创建则创建并返回
  • getSession(boolean) 如果参数是false,如果会话存在则返回,否则返回null;如果参数为true,和无参数方法一致。

常用方法:

  • String getId() 返回包含分配给此会话的唯一标识符的字符串(会话ID)
  • void invalidate() 使会话无效,然后取消对任何绑定到词汇化的对象的绑定
  • void setAttribute(String name,Object value)使用指定名称将对象绑定到此会话
  • Object getAttribute(String name)返回此会话中的指定名称绑在到一起的对象
  • void removeAttribute(String name)从此会话中移除与指定名称绑定在一起的对象。

cookie

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

  • Cookies是Servlet发送到Web浏览器的少量信息,这些信息由浏览器保存,然后发送回服务器。Cookie一般用来保存会话ID来实现会话跟踪(jsessionid=xxxxxxxx
  • 一个Cookie拥有一个名称、一个值和一些可选属性,比如注释、路径和域限定符、最大生存时间和版本号。
  • Servlet通过使用HTTPServletRespone的addCookie(cookie)方法将Cookie发送到浏览器,该方法将字段添加到HTTP响应头发送到浏览器。浏览器支持每台Web服务器有20个Cookie。总共有300个Cookie。每个Coolie的大小默认为4kb
  • 浏览器通过向HTTP请求头添加字段将Cookie(cookie) 返回给Servlet。可使用HttpServletRequset的getCookie()方法从请求中获取Cookie
  • Cookie通过名称和路径来进行区分。

####常用方法:

  • Cookie(String name,String value)构建通过key/value保存的信息
  • void setDomain(String pattern)指定应在其中显示此Cookie的域
  • String getDomain()返回为此Cookie设置的域名
  • void setMaxAge(int expiry)设置 Cookie的最大生存空间,以秒为单位。负值浏览器退出时删除。0值会导致删除cookie
  • int getMaxAge()返回以秒为单位指定的Cookie的最大的生存空时间
  • String getName()返回Cookie的名称。名称在创建后不得更改
  • String getValue() 返回Cookie的值
  • void setPath(String url)指定客户端应该返回Cookie的路径。对于指定目录中的所有页面及其子目录中的所有页面都是可见的。

URL重写

  • 为什么要对URL进行重写
  • 客户端不支持Cookie或者禁用Cookie
  • 服务器端不能通过Cookie获取jsessionid
  • URl重写
  • 将jsessionid加入到URL之后
  • 使用HttpServletRequest进行重写
  • String encodeURL(String url) 通过将会话ID包含在指定URL中并对该URL进行编码。如果不需要编码,则返回未更改的URL。
  • String encodeRedirect(String url) 对指定URL进行编码,以便在 sendRedirect 方法中使用它,如果不需要编码,则返回未更改的URL(可判断是否需要将ID加入到URl)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值