cookie和session
cookie是客户端技术,session是服务端技术
cookie保存用户数据的原理:
Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。
当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。
session保存用户数据的原理:
Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,
由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,
当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。
cookie和session的区别:
cookie是把用户的数据写给用户的浏览器
session是把用户的数据写到用户独占的session中
使用cookie完成上一次访问时间:
public class ShowLastVisitTimeServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //解决乱码问题 response.setContentType("text/html;charset=UTF-8"); //首先获取客户端带过来的cookie Cookies[] cookie = request.getCookies(); //解析这个cookies Cookie targetCookie = parseTargetCookie(cookies,"lastvisit"); //判断这个targetCookie if(targetCookie == null){ //说明是第一次访问 response.getWriter.print("您是第一次访问该网站"); }else{ //说明之前访问过,取出来 String value = targetCookie.getValue(); response.getWriter().print("上次的访问时间 是 : " + new Date(Long.parseLong(value))); } Cookie cookie = new Cookie("lastvisit",System.currentTimeMillis()+""); //设置cookie的有效期 cookie.setMaxAge(60*60*24); //设置有效路径 cookie.setPath("/");//其中/代表localhost //将cookie回写给客户 response.addCookie(cookie); } public Cookie parseTargetCookie(Cookie[] cookies,String name){ if(cookies == null){ return null; }else{ //遍历cookies for(Cookie cookie : cookies){ if(cookie.getName().equals(name)){ return cookie; } } return null; }
session:
实现的原理:给浏览器端回写了一个JSESSIONID的cookie,默认情况下,这个cookie是没有设置有效期的
那么它的有效期就是当前浏览器进程,当浏览器关闭,JSESSIONID就会丢失,下次再带访问时就无法找到
服务器端的session了,找不到不代表服务器端的session不存在,session的有效期默认是半小时,如果
半小时之内都没有访问,那么这个session就会被摧毁
三种销毁session对象情况:
1)不正常关闭服务器(正常关闭服务器,session会被序列化到硬盘中,保存在tomcat/work目录下)
2)session过期,默认过期时间在tomcat\conf\web.xml中配置
<session-config>
<session-timeout>30</session-timeout>
</session-config>
3)在程序中执行session.invalidate();手动销毁session对象
session.removeAttribute()和session.invalidate()的区别:
第一个方法是删除session中一个属性值
第二个方法是销毁session对象,把全部的属性都消除了