详述session与cookie(一)cookie篇

昨天面试官问我,在网页登陆之后,为什么在其他页面也是保持登陆状态的呢。当时我一脸懵逼,只好支支吾吾的说大概是保存在session或者cookie里了。然后他就开始问细节,显然我并不了解。因此决定现在好好来理解一下session和cookie到底是怎么回事。

0. 会话

用户打开一个浏览器,访问web资源,就产生了一个会话。当用户关闭浏览器,会话结束。

学术地讲,他是指一个终端用户与交互系统进行通讯的过程。他的生命期是从建立TCP连接起,到释放TCP连接止。

 

1. cookie是什么?

由于http协议是无状态的,因此仅靠协议本身,是无法实现“记住登陆状态”这种功能的。处于这种需求,cookie应运而生。

cookie就是储存在用户本地终端上的数据。

 

2. Java中的Cookie

来源于javax.servlet.http.Cookie。以下说明几种方法:

Cookie(String name, String value)。 Cookie的构造方法。

public void setMaxAge(int expiry)。 MaxAge是Cookie的存活时间,单位秒。该方法可以设置Cookie的有效期。如果有效期为零,也就是浏览器关闭时即销毁Cookie,这种Cookie也被称为会话Cookie;如果设置了Cookie的有效期,比如一天,那么Cookie就会被保存到硬盘中,存活时间为一天,这种Cookie也被称为持久Cookie。

public void setPath(String uri)。设置cookie的有效路径,比如把cookie的有效路径设置为"/hello",那么访问"hello"目录下的web资源时,都会带上cookie。

public void setDomain(String pattern)。设置cookie的有效域。

 

3. 一个实例

来源 https://www.cnblogs.com/xdp-gacl/p/3803033.html

public class CookieDemo1 extends HttpServlet{
	public void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException{
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		
		Cookie[] cookies = request.getCookies();
		if (cookies!=null) {
			out.write("The last access time is: ");
			for (int i=0; i<cookies.length; ++i)
			{
				if (cookies[i].getName().equals("lastAccess"));
				{
					Long lastAccess = Long.parseLong(cookies[i].getValue());
					Date date = new Date(lastAccess);
					out.write(date.toLocaleString());
				}
			}
		}
		else {
			out.write("It's the first time you access.");
		}
		Cookie c = new Cookie("lastAccess", System.currentTimeMillis()+"");
		
		response.addCookie(c);
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException{
		doGet(request, response);
	}
}

打开浏览器时会显示第一次访问,之后刷新都会显示最后一次访问的时间。如果关掉浏览器再打开就会显示第一次访问。

如果加上这句:

c.setMaxAge(10*60);

那么就生成了持久cookie,存放在硬盘中。那么在有效期内,关闭浏览器再打开依然会显示上一次访问时间。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值