A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Mylo 黑马粉丝团   /  2018-1-11 16:55  /  1426 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Mylo 于 2018-1-11 17:07 编辑

Cookie:
      cookie 常用于识别用户。cookie 是服务器留在用户计算机中的小文件,例如用户密码、用户账户等等,服务器是可以获取到cookie的内容的;而session则是存储在服务器端,通过唯一的session_id来区别用户,用于保存用户的登录状态和请求等,客户是不能获取到其内容的。。每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie。
要注意到cookie的名称是无法修改的,同时cookie并不提供修改和删除的操作,如果说要修改cookie 的内容,则可以新建一个同名的cookie覆盖掉原来的即可;要删除cookie的话则新建一个同名的cookie,并设置其maxAge为0即可。
 需要考虑cookie中maxAge的一些特殊值所代表的含义,如果maxAge为负值,则表示cookie仅仅在当前浏览器窗口以及其打开的子窗口中有效,关闭时则失效,这也是cookie的默认maxAge值;如果maxAge为0,则说明删除该cookie,由于并没有删除cookie的操作,这里是需要通过cookie的maxAge来进行删除操作的。

核心代码
Cookie cookie = new Cookie(name,value);//创建cookie
cookie.setMaxAge(秒);//设置有效期
cookie.setPath(有效路径);//设置有效路径
response.addCookie(cookie);//将cookie响应给客户端浏览器去存储
public void doPost(HttpServletRequest request, HttpServletResponse response)
                        throws ServletException, IOException {

                //创建Cookie并存储了数据
                //cookie特点
                //                只能存储string字符串,一个cookie只能存储一对key和value
                //                存储在客户端浏览器的小文件
                //                如果cookie没有设置有效期,默认有效期就是浏览器关闭,默认也不会产生缓存的文件
                //疑问:cookie技术运行原理,每次请求服务器端都携带着cookie,有没有这个必要,所有的服务器端都需要读取这个数据吗?
                //                并不是所有的服务器端资源都要读取cookie数据的,可以通过设置有效路径解决  
                //                默认情况:服务器端产生数据,客户端存储数据,每次请求服务器cookie都会带到服务器
                Cookie cookie = new Cookie("username", "admin");
                //设置有效期
                cookie.setMaxAge(60*60*24*7);//单位:秒,7天
                //需求:只让GetCookieDataServlet读取,别的资源不能读取
                cookie.setPath("/Mylo");//只允许/day38/getCookieData这个路径读取,别的资源无法读取;如果没有设置这个值,默认值就是/day38
                //cookie的数据响应给浏览器
                response.addCookie(cookie);
        }
读取Cookie
        Cookie[] cookies = request.getCookies();
                if(cookies!=null){
                        for (Cookie cookie : cookies) {
                                if(cookie.getName().equals("username")){
                                        response.getWriter().write(cookie.getValue());
                                        break;
                                }
                        }
                }
删除cookie
只要创建名称与有效路径一模一样的cookie对象,设置有效期为0就可以了



2 个回复

倒序浏览
回复 使用道具 举报
给dalao顶帖!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马