Session和Cookie(会话跟踪技术)
Session和Cookie(会话跟踪技术)
Cookie通过在客户端记录信息确定用户身份
Session通过在服务器端记录信息确定用户身份
Cookie的应用:
1.保持用户登录状态
将用户的信息保存到Cookie中,并发送给浏览器,并且将有效时间设置为一个较长的时间,这样浏览器在以后访问 网站时,都会带着该Cookie,服务器以此来辨识用户,用户就不再需要输入用户名和密码等信息。
2.记录用户名
一旦用户登录成功以后,下次再登录时,直接将Cookie中的用户名读取并显示出来,这样用户就不需要再次输入 用户名,只输入密码即可
Cookie的设置和获取:
通过HttpServletResponse.addCookie的方式设置Cookie
Cookie cookie = new Cookie("jieguo","true");
response.addCookie(cookie)
通过HttpServletRequest获取 Cookie:
Cookie[] cookies = request.getCookies();
if(cookies != null)
for(Cookie c : cookies){
String name = c.getName();//获取Cookie名称
if("jieguo".equals(name)){
String value = c.getValue();//获取Cookie的值
bool = Boolean.valueOf(value);//将值转为Boolean类型
}
}
设置Cookie的有效时间:
//setMaxAge用来设置Cookie的大有效时间,需要int型的参数,代表有效的秒数
cookie.setMaxAge(秒数);
//当参数大于0时,会设置为指定的秒数
cookie.setMaxAge(30);
//当参数等于0时,浏览器不会保存Cookie,Cookie立即失效
cookie.setMaxAge(0);
//当参数小于0时,和不设置是一样,当前会话有效
cookie.setMaxAge(-100);
//设置一个永久有效的Cookie,并非永久,只是使Cookie的生命很长而已
cookie.setMaxAge(60*60*24*365*10);
session的设置和获取
HttpSession session = request.getSession(); // 获取Session对象
session.setAttribute("loginTime", new Date()); // 设置Session中的属性
session.getAttribute("loginTime") //获取session中存储的数据
为防止内存溢出,服务器会把长时间内没有活 跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自 动失效了。
setMaxInactiveInterval(100) //设置用户超时访问session失效时间,单位是秒
Session和Cookie的区别
(1) Cookie数据保存在客户端,Session数据保存在服务器端。
(2) Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的 SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户 端,用Cookie保存的,用户提交页面时,会将这一SessionID提交到服务器端,来存取Session数据。这一过程,是 不用开发人员干预的。所以一旦客户端禁用Cookie,那么Session也会失效。
(3) Cookies是属于Session对象的一种。但有不同,Cookies不会占服务器资源,是存在客服端内存或者一个 Cookie的文本文件中;而Session则会占用服务器资源。所以,尽量不要使用Session,而使用Cookies。但是我们 一般认为Cookie是不可靠的,Cookies是保存在本机上的,但是其信息的完全可见性且易于本地编辑性,往往可以 引起很多的安全问题Session是可靠地。但是目前很多著名的站点也都用Cookie