cookie和session

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


你可能感兴趣的:(session,cookie)