servlet中的cookie和session

servlet中cookie和session的功能和配置

作者 jooop 日期 2016-10-11
servlet中的cookie和session

Cookie和Session相关

因HTTP是无状态的协议,即客户端和服务器端不需要建立持久的链接,因此为了建立客户端浏览器与服务器的识别功能,需用Cookie解决。

Cookie是在客户端请求服务器时,服务器为了记录该用户状态,用response向客户端浏览器返回一个cookie,浏览器将该cookie保存起来,待再次访问该服务器时,浏览器将cookie附于URL一同提交给服务器,服务器通过cookie信息识别用户身份与状态。

特点:

  1. 服务器可以向客户端写内容。
  2. 只能是文本内容。
  3. 客户端可以阻止服务器写入。
  4. 只能取自己webapplication写入的cookie。
  5. 一个servlet/jsp设置的cookies能够被同一个路径(指URL路径)下面或者子路径下面的servlet/jsp读取到,不能被父路径下的servlet/jsp读取到。

创建与使用:

cookie以”名-值”对的形式保存数据

创建cookie:

Cookie cookie = new Cookie(name,value); //创建cookie对象,输入要保存的名值对
cookie.setMaxAge(3600); //age为cookie在客户端的最大生存周期。若不设置age,则为临时cookie,关闭浏览器则清除cookie
response.addCookie(cookie); //添加cookie到response中

从客户端拿到cookie:

Cookie[] cookies = request.getCookies(); //获取request中的cookie数组
cookies[i].getName();
cookies[i].getValue(); //获取客户端cookie中的名-值。

Session:

记录在服务器端,与唯一的客户端浏览器窗口相关联

实现方式:

  1. 通过Cookie实现(将SessionId放在临时Cookie中)
  2. 若浏览器不支持Cookie,可通过URL重写来实现
    response.encodeURL()
    (转码,URL后面加入SessionId,(表现为jsessionid=XXXXXXX……)客户端访问的同时在URL中将SessionId告知服务器。)
    

通过HttpSession来读写Session

HttpSesson mySession = request.getSession(true); //如果request中原有session,就获取该session,若没有,就创建一个新的session
//request.getSession(false)只取,若无不会创建。)
mySession.isNew(); //mySession是不是新创建的
mySession.getId(); //拿到id号
mySession.CreationTime(); //获取创建时间
mySession.getLastAccessedTime(); //最后一次访问时间
request.getRequestedSessionId(); //获取request中的sessionId
request.isRequestedSessionIdFromCookie(); //是否是从Cookie中获取到的
request.isRequestedSessionIdFromURL(); //是否是从URL中获取到的
request.isRequestedSessionIdValid(); //是否有效

Session过期时间:在web.xml中配置:

<session-cofig>
<session-timeout>30</session-timeout> <!--30分钟过期-->
</session-cofig>

Session作用:

可以存内容,且该内容只有与Session相匹配的客户端窗口可以读取。

session.setAttribute("accessCount",value); //在session中存入名为"accseeCount"的属性,值为value。(名字只能为String,值Object)
session.getAttribute("accseeCount"); //拿到名为"accseeCount"的属性的值。

Session访问路径问题:

同一个客户端窗口下,同一个application下的servlet/jsp可以共享同一个sessio。