JSP内置对象session
session通常被翻译成“会话”。一个会话是指用户通过浏览器(客户端)与服务器之间进行的一系列的交互过程,交互期间可以包含浏览器与服务器之间的多次请求、响应。以下是几个常见的session使用情景。
(1)用户在浏览某个网站时,从进入网站到关闭这个网站所经过的这段时间,也就是用户浏览这个网站的整个过程,就是一个session。
(2)在电子邮件应用中,从一个客户登陆到电子邮件系统开始,经过收信、写信和发信等一系列操作,直至最后退出邮件系统,整个过程为一个session。
(3)在购物网站应用中,从一个客户开始购物,到浏览商品、结算等,直至最后的结账,整个过程为一个session。
session运行机制如下:
当用户(浏览器)向Wed应用第一次发送请求时,服务器会创建一个session对象并分配给该用户;该session对象中包含着一个唯一标识符sessionId,并且服务器会在第一次响应用户时,将此sessionId作为jsessionId保存在浏览器的Cookie对象中;这个session将一直延续到用户访问结束(浏览器关闭或用户长时间不访问Wed应用)。
当Wed应用接收到用户的请求时,首先会检查服务器是否已经为这个用户(浏览器)创建过了session对象,具体是判断用户的请求是否包含了一个sessionId,如果包含sessionId,则服务器就会通过这个sessionId找到对应的session,以确定是这个用户在访问服务器。而如果用户的请求中没有sessionId,则服务器会为该用户创建一个新的session,并生成一个与此session对应的sessionId,然后将sessionId随着本次响应返回给用户(浏览器的Cookie对象中)。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>CreateSession</title>
</head>
<body>
<%
session.setAttribute("dog", "小狗狗");
response.sendRedirect("cookie.jsp");
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//获取session的值
out.print("sessionId: "+session.getId()+"<br/>");
//Cookie中会默认保存一个jsessionId的名和值
Cookie[] cookie = request.getCookies();
out.print(cookie[0].getName()+" :"+cookie[0].getValue());
%>
</body>
</html>
可以发现,服务器中session对象产生的sessionId的值,与客户端中Cookie对象产生的jsessionId值得内容是一样的。