论坛首页 Web前端技术论坛

web开发中的Cookie笔记

浏览 1601 次
精华帖 (2) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-03-21  
http://www.hetaoblog.com/myblogs/post/web-cookie-notes.jhtml

最近越来越有种感觉,很多技术以前也写代码去用,当时看的时候也觉得已经有所了解了,但是时间长了再有需要,发现再要写,还是得花点时间去看细节,api等; 但是如果这事我在博客上写过一遍了,一般就记得比较清楚; 同时找出来再实现也非常快;
昨晚在实现hourlog的cookie功能就是这个情况,早上起来趁女儿没醒赶紧写一下cookie笔记;

1. Cookie基本概念
由服务端生成,发送给浏览器,浏览器会将cookie的内容保存在本地;同时,以后浏览器发送http请求的时候,如果符合一定的条件,就会将cookie的内容也包含在http请求中;
主要的条件是看域名,过期时间,路径;
cookie的目的是为了保存和客户相关的一些信息,使得服务端不用通过再次验证就可以确认当前请求具体属于哪个用户;
比如做记住登录功能,就可以写一个cookie然后不需要输入用户名和密码就可以登录;
当然,这里不是把密码写在客户端;
2. java中的cookie
J2EE里面的Cookie类主要的属性有domain,name, value,path,maxage; 其中domain就对应域名,path对应路径,maxage对应过期时间

3. 在程序中生成cookie

我给hourlog生成cookie的代码大意如下;
其中cookiestr使用当前用户名+当前时间+随机数的方式生成;
最后调用response.addCookie将这个cookie返回给浏览器,浏览器会将这个值保存;
同时,我将生成的这个cookiestr保存在用户表里面

		Cookie c = new Cookie("__hetaoblog_uid", cookiestr);

		c.setDomain("www.hetaoblog.com");

		c.setMaxAge(60 * 60 * 24 * 365);

		c.setPath(contextpath + "/tool/hourlog/index.jhtml");

                response.addCookie(c);



4. 验证cookie
下次请求过来,如果是www.hetaoblog.com这个域名下,路径是/tool/hourlog/index.jhtml的时候,
浏览器就会发送名字叫__hetaoblog_uid的cookie,他的值是一个字符串;
服务端通过request.getCookies()得到所有的cookie,然后遍历一遍,取到名字是__hetaoblog_uid的cookie,
然后去数据库里面根据cookie值看看有没有这个用户,如果有的话就表示这个是记住密码的用户,不需要再次登录了,直接返回这个用户的界面;

			if(null != request.getCookies())

			{

				for(Cookie c: request.getCookies())

				{

					if(Const.HETAOBLOG_COOKIE.equalsIgnoreCase(c.getName()))

					{

						String cookie = c.getValue();

						UserDao userDao = new UserDao();

						sinaUser = userDao.getSinaUserWithCookie(cookie);

					}

				}

			}


论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics