详解Cookie和Session

    之所以把这二者放在一起说,是因为它们的作用类似:记录一定时间段内Web程序需要使用到的数据,不同的是Cookie存放于客户端,而Session存放于服务端,以下详细说明。

Cookie

    Cookie内容为键值对,可以存在于内存中,也可以保存为txt文件,它由服务器端生成,发送给客户端。如果是txt格式Cookie,浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器。

    作用

    因为Cookie内容为键值对,所以可以存储网站记录等,高级的Cookie开发还可以据此对访问内容排序,但Cookie常见的作用记录登录信息,简化登录功能。

    这个有体会的是上次在网上购买了6个小时的ChinaNet上网时长,结果风行网络电视推荐的网购内容全与上网时长有关,我的猜测是风行读取了我浏览器的购物车Cookie。

    生命周期

    Cookie在生成时就会被指定一个时间值,这就是Cookie的生存周期(如果为整数,表示以文件格式存储),在这个周期内Cookie有效,超出周期Cookie就会被清除,有些页面将Cookie的生存周期设置为0或负值,这样在关闭浏览器时,马上清除Cookie,默认生命周期为会话期。

    实例

    以存放和读取用户名和密码为例:
    写入:
public class SetCookieServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		Cookie c1=new Cookie("password", "123456");
		Cookie c2=new Cookie("name", "LEE");
		c2.setMaxAge(60*60);
		resp.addCookie(c1);
		resp.addCookie(c2);
		
		req.getRequestDispatcher("/servlet/ShowCookieServlet").forward(req, resp);
	}
}
    读取:
public class ShowCookieServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		Cookie [] cookies=req.getCookies();
		for (int i = 0; i < cookies.length; i++) {
			Cookie cookie=cookies[i];
			resp.getWriter().print(cookie.getName()+","+cookie.getValue());
		}
	}
}
    因为对只c2设置了生命周期,所以当关闭会话重新打开时,c1已经读取不到,而c2可以。

    URL重写

    当浏览器禁用Cookie时,可以代替的一个方法是:URL重写,URL重写可以保持原会话。

Session

    Session同样起保存客户端与服务器交互数据的作用,它存在于服务端,当请求成功建立时即在内存中开辟出一个空间,用于保存本次会话的数据。Tomcat中默认的会话时长为30分钟,可以自行设置。

Session和Cookie

    二者从请求开始先后产生,关系可用如下图表示:

    

    即:

  • 服务器接受请求,为该请求在内存中创建一个会话
  • 该会话有唯一的ID
  • 服务端生成带有ID的Cookie,返回给客户端
  • 客户端再次请求时,可以根据该ID继续使用已开辟的空间。

    关于Session和Cookie,暂时先说到这里。


    更多博客,其访问《项目总结》。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值