Session管理(会话技术)

定义:由于在web开发中,Http协议是无状态协议,所以并没有能够记录用户的状态身份等信息。所以就会用到session来进行跟踪

讲到session的会话技术必然先讲讲Cookie先。

Cookie                                                                                                                                                                                              

定义:

Cookie用于会话中,会话呢其实就是打开浏览器到关闭浏览器其实就是一个会话,而在会话中,我们经常会访问一些网页,而这些网页,有时也会用到用户名、邮箱等会话信息,那么Cookie会将这些会话信息保存到本计算机上,当下次再打开浏览器时,向web服务器发送任何请求时,浏览器会将这些Cookie信息发送到服务器,服务器将会使用这些信息来识别用户;要注意的是Cookie是由服务端产生的。

Cookie的引用

创建Cookie

Cookie[] cookies=request.getCookies();要访问浏览器发出的cookie,可以在HttpRequest中使用getCookie方法。

返回Cookie给浏览器

httpServletResponse.addCookie(cookie);

方法

1.public void setDomain(String pattern):设置 cookie 作用的域

2.public String getDomain():获取 cookie 作用的域

3.public void setMaxAge(int expiry):设置 cookie 过期的时间。如果不这样设置,Cookie默认的销毁时长是浏览器关闭

4.public int getMaxAge():返回 cookie 的最大生存周期,默认为-1;表示持续到浏览器关闭

5.public String getName():返回 cookie 的名称。名称在创建后不能改变

6.void setValue(String newValue):设置与 cookie 关联的值

7.public String getValue():获取与 cookie 关联的值

8.public void setPath(String uri):设置 cookie 适用的路径

9.public String getPath():获取 cookie 适用的路径

10.public void setSecure(boolean flag):设置布尔值,表示 cookie 是否应该只在加密的(即 SSL)连接上发送

11.public void setComment(String purpose):描述 cookie 目的的注释。该注释在浏览器向用户呈现 cookie 时非常有用

12.public String getComment():返回描述 cookie 目的的注释

实例

jsp

<form action="CookieServlet" method="post">
名字:<input type="text" name="username"><br />
密码:<input type="password" name="password" />
<input type="submit" value="提交" />
</form>

web.xml(略)


CookieServlet

// 扩展 HttpServlet 类
public class HelloForm extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
      // 为用户名创建 Cookies      
      Cookie userName = new Cookie("username",
                      request.getParameter("username"));
      // 为 Cookies 设置过期日期为 24 小时后
      userName.setMaxAge(60*60*24); 
      // 在响应头中添加Cookies
      response.addCookie( userName );
      // 设置响应内容类型
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();
      String title = "设置 Cookies 实例";
      String docType =
      "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
           out.println(docType +
                "<html>\n" +
                "<head><title>" + title + "</title></head>\n" +
                "<body bgcolor=\"#f0f0f0\">\n" +
                "<h1 align=\"center\">" + title + "</h1>\n" +
                "<ul>\n" +
                "  <li><b>名字</b>:"
                + request.getParameter("first_name") + "\n" +
                "  <li><b>姓氏</b>:"
                + request.getParameter("last_name") + "\n" +
                "</ul>\n" +
                "</body></html>");
  }
}


Session                                                                                                                                                                                                
定义:

Session是会话的跟踪技术,比如:我们在购买一件东西,加入购车然后跳转到支付页面,那么这个过程怎么每个页面都能有我们所买的东西还有价格呢,那么这些就要用到session来保存数据。

方法:

1.public Object getAttribute(String name):获取session 会话中具有指定名称的对象

2.public void setAttribute(String name, Object value) :使用指定的名称绑定一个对象到该 session 会话

3.public Enumeration getAttributeNames():返回 String 对象的枚举,String 对象包含所有绑定到该 session 会话的对象的名称

4.public long getCreationTime():返回该 session 会话被创建的时间;时间按1970:1:1起算

5.public String getId():返回一个包含分配给该 session 会话的唯一标识符的字符串

6.public long getLastAccessedTime():返回客户端最后一次发送与该 session 会话相关的请求的时间

7.public void invalidate():消除session

8.public boolean isNew():如果客户端还不知道该 session 会话,或者如果客户选择不参入该 session 会话,则该方法返回 true

9.public void removeAttribute(String name):该方法将从该 session 会话移除指定名称的对象

实例

public class SessionTrack extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException{
      // 如果不存在 session 会话,则创建一个 session 对象
      HttpSession session = request.getSession(true);
      // 获取 session 创建时间
      Date createTime = new Date(session.getCreationTime());
      // 获取该网页的最后一次访问时间
      Date lastAccessTime =new Date(session.getLastAccessedTime());
      String title = "欢迎回到我的网站";
      Integer visitCount = new Integer(0);
      String visitCountKey = new String("visitCount");
      String userIDKey = new String("userID");
      String userID = new String("ABCD");
      // 检查网页上是否有新的访问者
      if (session.isNew()){
         title = "欢迎来到我的网站";
         session.setAttribute(userIDKey, userID);
      } else {
         visitCount = (Integer)session.getAttribute(visitCountKey);
         visitCount = visitCount + 1;
         userID = (String)session.getAttribute(userIDKey);
      }
      session.setAttribute(visitCountKey,  visitCount);
      // 设置响应内容类型
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();
  }
}

你可能感兴趣的:(session,cookie,会话技术)