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对象,把全部的属性都消除了