JAVA WEB Cookie Session 区别测试 – 10.28


添加Cookies和Session的代码

package Cookies;
 
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
public class AddCookies extends HttpServlet {
 
 /**
 * @author Administrator
 */ private static final long serialVersionUID = 1L;
 
 @Override
 protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 // Session
 HttpSession session = req.getSession();
 session.setAttribute("Lckiss", "Session NotPass");
 // Cookies
 Cookie C = new Cookie("Lckiss", "Cookies Pass");
// C.setPath("/Cookies/");
 C.setMaxAge(60 * 60 * 24);
 resp.addCookie(C);
 
 resp.setContentType("text/html;charset=utf-8");
 PrintWriter out = resp.getWriter();
 out.println("<h3>已添加一个Cookies</h3>");
 out.println("<h3>已生成一个Session</h3>");
 
 
 
 }
 
}

1477645181670079.png

 读取Cookies和Session的代码

package Cookies;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
 
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
public class ReadCookies extends HttpServlet {
 
 /**
 * @author Administrator
 */ private static final long serialVersionUID = 1L;
 
 @Override
 protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 resp.setContentType("text/html;charset=utf-8");
 PrintWriter out = resp.getWriter();
 Cookie MYCookies[] = req.getCookies();
 
 out.println("<h3>以下为Cookies数据</h3>");
 out.println(MYCookies.length);
 for (int i = 0; i < MYCookies.length; i++) {
 Cookie C = MYCookies[i];
 out.println("<p>Cookies Name:" + C.getName()+" ");
 out.println("| Cookies Value:" + C.getValue() + "</p>");
 out.println("-----------");
// out.println("<p>Cookies.getPath:" + C.getPath() + "</p>");
 // System.out.println(C.getVersion());
 }
 
 HttpSession S = req.getSession();
 Enumeration<String> Sname = S.getAttributeNames();
 String Svalue = S.getAttribute("Lckiss").toString();
 out.println("<h3>以下为Session数据</h3>");
 out.println("<p>Session Name:" + Sname.nextElement().toString() + " ");
 out.println("| Session Value:" + Svalue + "</p>");
 }
}

1477645190138547.png

书上一个记录访问时间和访问次数的代码

package Cookies;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
 
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class VisitTimes extends HttpServlet {
 
 /**
 * @author Administrator
 */ private static final long serialVersionUID = 1L;
 
 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 resp.setContentType("text/html;charset=utf-8");
 PrintWriter out = resp.getWriter();
 
 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 String nowTime = sdf.format(new Date());
 String lastVistTime = "";
 int vistedCount=0;
 // 获取所有的Cookies
 Cookie[] cookies = req.getCookies();
 if (cookies != null) {
 for (Cookie cookie : cookies) {
 // 判断是否为记录最近访问时间的Cookies
 if ("lastVistTime".equals(cookie.getName())) {
 lastVistTime = cookie.getValue();
 }
 // 判断是否为记录访问次数的Cookies
 if ("VistedCount".equals(cookie.getName())) {
 vistedCount = Integer.valueOf(cookie.getValue());
 }
 }
 System.out.println(vistedCount);
 // 若曾经访问过,输出上次访问时间
 if (!"".equals(lastVistTime))
 out.println("<p>您上次访问的时间是:" + lastVistTime + "</p>");
 // 输入访问次数
 out.println("<p>您是第" + (vistedCount + 1) + "次访问网站</p>");
 //以本次访问时间重建同名新Cookies
 Cookie lastVistedTimeC = new Cookie("lastVistTime", nowTime);
 lastVistedTimeC.setMaxAge(60 * 60 * 24);
 //以本次访问时间重建同名新Cookies
 Cookie VistedCountC = new Cookie("VistedCount", String.valueOf(vistedCount + 1));
 VistedCountC.setMaxAge(60 * 60 * 24);
 resp.addCookie(lastVistedTimeC);
 resp.addCookie(VistedCountC);
 
 }
 }
}

1477645197436394.png

我的感觉就是Cookies是Session的一个载体,Cookies没了 Session也肯定没了,百度的结果如下

cookie 和session 的区别:

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
  考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
  考虑到减轻服务器性能方面,应当使用COOKIE。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、所以个人建议:
  将登陆信息等重要信息存放为SESSION
  其他信息如果需要保留,可以放在COOKIE中

 TIL-MICE 2016.10.28

声明:TIL|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA[ZH]协议进行授权

转载:转载请注明原文链接 - JAVA WEB Cookie Session 区别测试 – 10.28


Life is very interesting. In the end, some of your greatest pains become your greatest strengths.