(1)什么是cookiehtml
a、cookie是一种客户端的状态管理技术b、当浏览器向服务器发送请求的时候,服务器会将少许的数据以set-cookie消息头的方式发送给浏览器,当浏览器再次访问服务器时,会将这些数据以cookie消息头的方式发送给服务器。java
(2)如何建立一个cookieweb
Cookie c = new Cookie(String name,String value);response.addCookie(c);默认状况下,cookie保存在浏览器内存中数据库
(3)cookie的查询浏览器
Cookie[] cookie = request.getCookies();安全
注意:该方法有可能返回nullString cookie.getName():查找cookie的名字String cookie.getValue():查找cookie的值服务器
(4)cookie的生存时间cookie
cookie.setMaxAge(int seconds):cookie的保存时间seconds>0:浏览器会将cookie保存在硬盘上,超过指定时间会删除该cookieseconds<0:缺省值,只将cookie保存在内存中,只要浏览器不关闭,cookie就一致保存,浏览器一旦关闭,cookie就会被清空。seconds=0:当即删除cookie,如要删除一个叫userID的cookie,那么能够这么作:Cookiec = new Cookie("userID","");c.setMaxAge(0);response.addCookie(c);app
(5)cookie的编码问题this
cookie只能保存ascii字符,对于不合法的字符(如中文)须要转换成ascii码
例:Cookie cookie3 = new Cookie("realname",URLEncoder.encode("姓名","utf-8"));
(6)cookie的路径问题
a、什么是cookie的路径问题?浏览器在向服务器发送请求时,会比较cookie的路径要与访问的服务器的路径是否匹配,只有匹配的cookie才会发送给服务器。b、cookie的默认路径默认路径等于建立该cookie的组件路径c、匹配规则浏览器要访问的路径必须是cookie的路径或者其子路径时,才会发送对应的cookied、设置cookie的路径cookie.setPath(String path)如:cookie.setPath("/appname");这样保证这个cookie能够被整个web应用访问。
(7)cookie域
setDomain:设置cookie域,指的是访问某个域的时候,才会带入cookie,访问其余域,不会带入cookie。默认会禁止该设置,由于安全性较差,如,访问baidu.com,baidu.com写一个域是google.com的cookie,那么访问google.com的时候会带入baidu.com的cookie,从而会实现攻击的效果。
(8)cookie的限制
a、cookie能够被用户禁止b、cookie不彻底,敏感数据,好比密码、帐号等须要加密。c、cookie的大小有限制,大约为4K左右d、cookie的个数也有限制,大约是300个左右e、每一个站点最多保存20个cookief、cookie只可以保存字符串。
建立cookie时的代码:(在第一次登录时的用户检测的servlet上)
protected void service(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{ resp.setContentType("text/html;charset=utf-8"); String uname=req.getParameter("username"); String password=req.getParameter("password"); Check ck=new Check(); User u=null; try { u=ck.check(uname, password); } catch (SQLException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } if(u==null) { req.getRequestDispatcher("Login").forward(req, resp); //System.out.println("this is a test"); //resp.getWriter().write("用户名或密码错误"); }else { Cookie c=new Cookie("uname",u.getUname()); c.setMaxAge(3*24*3600); resp.addCookie(c); resp.sendRedirect("Main"); } } }
cookie检测代码:
protected void service(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{ Cookie[] cks=req.getCookies(); String ckv=null; User Uck=new User(); Check ck=new Check(); if(cks!=null) { for(Cookie c:cks) { if("uname".equals(c.getName())) { ckv=c.getValue(); System.out.println(ckv); } } try { Uck=ck.check(ckv); } catch (SQLException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } if(ckv==null){//检查ckv是不是空,排除只有键,没有值得状况。 resp.sendRedirect("Login"); } if(Uck==null) {//检查Uck是否为空,排除在cookie有效期内,数据在数据库中被删除的况 resp.sendRedirect("Login"); }else { resp.sendRedirect("Main"); } }else { req.getRequestDispatcher("Login").forward(req, resp); } } }
第一次登陆时:
第二次登录时:
源代码:
连接:https://pan.baidu.com/s/1SADXDyNFq-ICc4NXFEMJNw 提取码:95th 复制这段内容后打开百度网盘手机App,操做更方便哦