1: 概念: 会话可简单理解为: 用户开一个浏览器, 点击多个超链接, 访问服务器多个web 资源, 然后关闭浏览器, 整个过程为之一个会话
2 : cookie
2.1 一个cookie 只能表示一种信息, 它至少罕有一个标识信息名称和设置值
2,2 一个web站点可以给浏览器发送多个cookies , 一个浏览器可以存储多个站点提供cookies
2.3 浏览器可以存储300个cookies, 一个站点可以存放20个
2.4 如果创建一个cookies, 并将它发送到浏览器, 默认情况下他是一个会话级别
2.5 cookie 存储中文
Cookie cookie = new Cookie("userName", URLEncoder.encode("孤傲苍狼", "UTF-8"));
response.addCookie(cookie);
3 : session
3.1 概念: 服务器为每个用户创建会话对象, 一个浏览器独占一个session 对象, 因此,在需要保存用户数据,
服务器可以把数据写到用户独占的浏览器中去。
4: session 和 cookie 区别
cookie 是把用户的数据写给用户浏览器,
session 技术吧用户的数据写到用户独占的session
session 对象由服务器创建, 开发人员可以调用request 对象的getSession方法得到session 对象
5 session的原理
服务器创建session 出来后, 会把session 的id 号,以cookie的形式给客户机, 这样,只要客户机的浏览器不关, 再去访问服务器是, 都会
着session的id 号去, 服务器发现客户机浏览器带着session id 过来了, 就会使用内存中与之对应的session 为之服务。
package xdp.gacl.session;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class SessionDemo1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("UTF=8");
response.setContentType("text/html;charset=UTF-8");
//使用request对象的getSession()获取session,如果session不存在则创建一个
HttpSession session = request.getSession();
//将数据存储到session中
session.setAttribute("data", "孤傲苍狼");
//获取session的Id
String sessionId = session.getId();
//判断session是不是新创建的
if (session.isNew()) {
response.getWriter().print("session创建成功,session的id是:"+sessionId);
}else {
response.getWriter().print("服务器已经存在该session了,session的id是:"+sessionId);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
刷新后
request.getSession()方法内部新创建了Session之后一定是做了如下的处理
//获取session的Id
String sessionId = session.getId();
//将session的Id存储到名字为JSESSIONID的cookie中
Cookie cookie = new Cookie("JSESSIONID", sessionId);
//设置cookie的有效路径
cookie.setPath(request.getContextPath());
response.addCookie(cookie);
session 的创建和销毁
创建
//使用request对象的getSession()获取session,如果session不存在则创建一个
HttpSession session = request.getSession();
//获取session的Id
String sessionId = session.getId();
//判断session是不是新创建的
if (session.isNew()) {
response.getWriter().print("session创建成功,session的id是:"+sessionId);
}else {
response.getWriter().print("服务器已经存在session,session的id是:"+sessionId);
}
销毁
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 设置Session的有效时间:以分钟为单位-->
<session-config>
<session-timeout>15</session-timeout>
</session-config>
</web-app>
当需要在程序中手动设置Session失效时,可以手工调用session.invalidate方法,摧毁session。
1 HttpSession session = request.getSession();
2 //手工调用session.invalidate方法,摧毁session
3 session.invalidate();