什么是会话控制??
会话就是聊天,服务器和客户端之间的请求和相应过程,使用会话控制技术,保存一些必要的数据,从而满足一些特定的功能,
一台电脑在登陆百度网站之后,不管是IP地址变更,还是关闭电脑重启之后,再一次打开百度网站,都是登陆状态,但是如果长时间没有打开百度,这里需要重新验证登陆信息。在有效时间范围以内的自动登陆就是利用会话控制技术来完成的。
Cookie 和 Session。我们先说说Cookie,Cookie是浏览器行为,浏览器保存服务器给予客户端数据的一种方式。
1.Cookie数据都是键值对形势,并且保存的数据都是字符串。
2.Cookie数据不能保存中文。
3.Cookie数据有大小限制,一般在4kb~8kb。
4.Cookie数据会根据浏览器内核的不同,支持的Cookie数量是不同的。
5.Cookie数据会访问不同的网络资源,自行选择对应的Cookie发送个服务器。
Cookie技术用的方法
构造方法:Cookie();在服务器端创建一个Cookie
成员方法:
setName(String name);
setValue(String value);
setMaxAge(int sec);
setPath(String url);
服务器需要发送Cookie数据给予浏览器保存
通过HttpServletResponse对象调用addCookie(Cookie cookie)
【注意】
Cookie数据中不支持空格
会出现500错误
Invalid Character [32] ==> space
Cookie的有效时间设置
整数表示当前Cookie在浏览器本地保存数据的时间,已秒为单位
cookie.setMaxAge(20);
当前浏览器打开状态下有效,如果浏览器关闭,cookie信息立即销毁
cookie.setMaxAge(-1);
销毁对应name的Cookie信息
cookie.setMaxAge(0);
Cookie的路径约束
当前Cookie有效范围是整个Tomcat服务器
cookie.setPath("/");
默认是当前Servlet对应URL路径Cookie有效
【缺省】cookie.setPath(“路径”);
可以设置指定路径,指定资源下使用对应的Cookie信息,超出范围无法使用
cookie.setPath(“路径”);
获取Cookie数据
通过HttpServletRequest对象获取Cookie数据
Cookie[] cookies = request.getCookies();
getName();
getValue();
利用Cookie保存用户上一次登陆时间
资源:
@WebServlet("/aaa")
如何确定用户是第一次访问?
因为用户第一次登陆,没有保存上一次登陆是的Cookie信息,假定Cookie name 为lastTime,如果没有对应的lastTime,等于说用户是第一次登陆
用户第一次的登陆
创建Cookie,存入本次登陆的时间,返回给浏览器
用户非第一次登陆
读取Cookie信息,发送Cookie中保存的上一次登陆时间,给用户展示,并且保留本次登陆时间
@WebServlet("/aaa")
public class LastTimeServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1. 获取Cookie数据
Cookie[] cookies = req.getCookies();
Cookie last = null;
String msg = null;
// 2. 验证Cookie数组中是否存在一个Cookie name属性为lastTime的Cookie信息
boolean flag = true;
// 利用循环遍历Cookie数组
if (cookies != null) {
for (Cookie cookie : cookies) {
if ("lastTime".equals(cookie.getName())) {
flag = false;
last = cookie;
break;
}
}
}
if (flag) {
// 第一次登陆
msg = "你好
";
} else {
// 非第一次登陆
msg = "您上一次登陆时间 " + last.getValue() + "
";
}
Cookie lastTime = new Cookie("aaa", new SimpleDateFormat("yyyy/MM/dd-HH:mm:ss").format(new Date()));
resp.addCookie(aaa);
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().append(msg);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}