JavaWeb学习__第5天__Cookie与Session

1.会话

    会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。
    会话过程中要解决的一些问题?
    每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,程序要想办法为每个用户保存这些数据。
    例如:用户点击超链接通过一个servlet购买了一个商品,程序应该想办法保存用户购买的商品,以便于用户点结帐servlet时,结帐servlet可以得到用户购买的商品为用户结帐。

2.Cookie

    将会话相关的数据保存到浏览器中,并且在每次访问服务器时都带过去。基于Set-Cookie响应头和cookie请求头进行工作,将会话产生的数据保存在了客户端。
    response提供了addCookie方法,可以在响应中增加一个Cookie信息
    request提供了getCookies方法,可以获取请求中的所有Cookie信息
    javax.servlet.http.Cookie,可以直接利用此类的构造方法创建一个Cookie,创建出来的Cookie需要设置一个名称和值:
    new Cookie(String name,String value); 新建一个Cookie对象
    Cookie方法:注意,浏览器是根据cookie的名称加上cookie的path来区分是否是同一个cookie的,如果需要覆盖之前的cookie,除了保证名称相同外还要保证path也相同。
    setMaxAge与getMaxAge方法:Cookie发送到浏览器时,如果没有设置MaxAge,则当前Cookie信息会被存在浏览器的内存中,当关闭浏览器时,cookie信息就消失掉了(会话级别的cookie)。我们也可以为Cookie设置一个MaxAge,浏览器收到这样的cookie后,会将cookie信息以文件的形式保存在浏览器的临时文件夹中,并且会设置文件的有效期限为maxage的值。这样依赖在超时时间到来之前,浏览器无乱开关多少次,都会带有这个Cookie信息。

    setPath与getPath方法:设置浏览器在访问哪个地址及其子地址时带着当前Cookie信息过来,如果不设置setPath这个方法,则默认的值是发送Cookie的Servlet所在的路径做Path
    setDomain与getDomain方法 :设置浏览器在访问哪个域名时,带着这个Cookie信息,默认值是当前发送Cookie信息的网站的域名。现代的浏览器,只要cookie设置过domain信息,则浏览器拒绝接受此cookie。
    删除一个Cookie:发送一个同名,同path,同domain(不设置)的cookie到浏览器,并设置maxAge为0,使浏览器收到这个Cookie后覆盖旧的Cookie,覆盖后新的Cookie立即超时,被删除,就相当于删除了一个Cookie。

    浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。

利用cookie实现显示上次访问时间

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
	response.setContentType("text/html;charset=UTF-8");
	Cookie[] cookies = request.getCookies();
		
	Cookie lastCookie = null;
	if(cookies!=null){
		for(Cookie c:cookies){
			if("last".equals(c.getName())){
				lastCookie = c;
				break;
			}
		}
	}
	if(lastCookie==null){
		response.getWriter().write("你是第一次访问本网站");
	}else{
		response.getWriter().write("上次访问时间:"+new Date(Long.parseLong(lastCookie.getValue())).toLocaleString());
	}
	Cookie cookie = new Cookie("last",new Date().getTime()+"");
	cookie.setPath(request.getContextPath());
	cookie.setMaxAge(24*60*60);
	response.addCookie(cookie);	
}

3.Session

    Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。

    一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。
    session是一个域对象,作用范围为整个会话。
    Session和Cookie的主要区别在于:
    1.Cookie是把用户的数据写给用户的浏览器。
    2.Session技术把用户的数据写到用户独占的session中。

    Session生命周期

    当第一调用到request.getSeesion()方法时,创建出session。当超过30分钟(这个时间可以修改)session都没有人使用,则服务器认为session已经超时,此时,销毁session。明确的调用session.invalidate方法也可以销毁session。当服务器非正常关闭时,session随着服务器销毁而销毁。如果服务器是正常关闭,则存活着的session,会在服务器关闭时,以文件的形式被存储在硬盘用,这个过程叫做session的钝化。服务器在正常启动时,会将钝化在文件中的session在恢复到内存中,这个过程叫做session的活化。




















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值