定义:由于在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来保存数据。
方法:
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(); } }