JavaWeb(四)--保持Http状态的四种方式:URL重写、隐藏域、Session和cookie

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a592381841/article/details/85226816

一、前言:

HTTP是无状态的。因此在默认状态下,服务器是不知道一个Http请求是否是来自第一次访问的项目。

因而有如下四种方法可以保持http的状态

  1. URL重写
  2. 隐藏域
  3. cookie
  4. httpsession对象

二、cookie

2-1:不足之处

用户可以通过设置他的浏览器来拒绝接受cookie

cookie中不能存中文

2-2:概述

  1. 客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客 户端浏览器颁发一个Cookie。
  2. 客户端浏览器会把Cookie保存起来。
  3. 当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务 器。
  4. 服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

2-3使用方法

2-3-1原始的方法

通过response发送set-cookie,用request获得cookie请求头

2-3-2 便捷方法

使用response的addcookie()方法向浏览器保存cookie

使用response的getcookies()方法获得浏览器归还的cookie

2-4:cookie属性

  1. name和value  键值对
  2. maxAge:cookie的最大生命周期时间,cookie保留的时间(秒为单位)
    1. maxAge>0 cookie保存有效时长;cookie保存在客户机的硬盘
    2. maxAge=0,  cookie保存在内存
    3. maxAge<0  cookie不保存,马上删除
  3. PATH(cookie路径)
    1. 由服务器创建cookie时,设置。
    2. 当客户端访问服务器的路径,需归还cookie给服务器是由Path决定。
      1. 当浏览器访问服务器,若路径包含某个cookie路径,则归还cookie
    3. path的默认值是当前访问路径的父路径。

三、HTTPSession

HTTPSession底层依赖cookie或者URL重写

会话:一个用户对服务器的多次连贯性请求,用户多次请求之间未关闭浏览器

会话范围:是某个用户从首次访问服务器开始直到用户关闭浏览器。

服务器会为每个客户端创建一个session对象,session好比客户在服务器端的账户,被服务器保存在一个Map中(session缓存)

在web.xml中配置session的最大不活动时间;

<session-config>
<session-time>30</session-time>
</session-config>

3-1获得session对象

  1. Servlet中
    1. HTTPSession session = request.getsession(); 
    2. HTTPSession session = request.getsession(true);   //同1一样
    3. HTTPSession session = request.getsession(false);  //若session缓存中无该session。则返回null
  2. JSP中无需创建直接用session。(JSP九大内置对象之一)

3-2相关方法

  1. void setAttribute(String name,Object value);
  2. Object getAttribute(String name);
  3. void removeAttribute(String name);  //前三个都是域操作
  4. String getId()  //获得sessionID
  5. int getMaxInactiveInterval()  //获得最大不活动时间
  6. void invalidate()  //使得session失效,并创建新的session和sessionID
  7. boolean isnew()  //查看该session是否刚创建,(创建后,服务器无响应客户端sessionID)

猜你喜欢

转载自blog.csdn.net/a592381841/article/details/85226816