Cookie的原理是通过Set-Cookie响应头和Cookie请求头将会话中产生的数据保存在客户端。--- 底层(SUN公司已经给我们提供了一套API)

Cookie是将需要保存的数据保存在了客户端, 是客户端技术. 每个客户端各自保存各自的数据, 再次访问服务器时会带着自己的数据, 每个客户端持有自己的数据, 因此就不会发生混乱了。

~~ 客户端可以存放300个左右Cookie,每个站点最多存放20个Cookie,每个Cookie的大小不能超出4KB ~~

创建Cookie:

 //在http请求(iso8859-1)中没有中文存在,则在输入中文用户名时再添加到cookie中,会出现编码问题。
//在没有编码之前服务器将会以iso8859-1的码表来解析username数据。则需要对存入cookie的数据进行URL编码; //将用户名保存在Cookie中
Cookie cookie = new Cookie("username", URLEncoder.encode(username, "utf-8"));
//设为保存7天
cookie.setMaxAge(3600*24*7);
//设置站点携带cookie的路径path---将设置成站点的所有页面都会携带cookie值访问后台
cookie.setPath(request.getContextPath()+"/");
//发送cookie
response.addCookie(cookie);

在JSP中获取指定的Cookie:

 <%
/** 获取后台发来的cookie值 **/
Cookie[] coo = request.getCookies();
String username ="";
if(coo != null){
for(Cookie cs:coo){
if("username".equals(cs.getName())){
username = cs.getValue();
/*取出数据时需要对数据进行解码。* **/
username = URLDecoder.decode(username, "utf-8");
}else{
username ="";
}
}
} %>
通过el表达式可直接在JSP页面获取username的值:${ cookie.username.value }
但是需要通过JS来解决解码乱码问题:
  //在记住密码后再次登录解决乱码问题
    var $username = $("input[name='username']");
    //默认只能用utf-8来解码
    var deuser = decodeURI($username.val());  
    //将解码后的数据回写到输入框内
    $username.val(deuser);

删除Cookie:

  ~~现在还没有这=直接删除Cookie的方法。 只能创建一个跟要删除的那个Cookie的名称、path、domain(基本不考虑使用)一致的Cookie来取代或覆盖那个要删除的Cookie,并将新创建的Cookie的 setMaxAge(0);

  ~~需要注意的是 名称、path、domain(基本不考虑使用)一定要一致,不然就会当成是从重新创建了个新的Cookie;

//将cookie清除掉
Cookie cookie = new Cookie("username", ""); cookie.setMaxAge(0); cookie.setPath(request.getContextPath()+"/"); response.addCookie(cookie);

总结:客户端每次访问服务器端都会携带Cookie到服务器端,服务器端通过request对象来遍历获取指定的Cookie并对其进行处理。

    在addCookie执行之后服务器将对发送的数据用iso8859-1的码表来对其进行编码。则需要在发送Cookie之前就要对数据进行URL编码操作(URLEncoder.encode(String name,String enc))。

    然而在获取Cookie的值时也需要对其进行URL解码(URLDecoder.decode(String name,String enc))。

    当然,在这个过程中,URL的编码和解码一定是相同的码表,不然就会乱码。

Cookie 的运用的更多相关文章

  1. 超大 Cookie 拒绝服务攻击

    有没有想过,如果网站的 Cookie 特别多特别大,会发生什么情况? 不多说,马上来试验一下: for (i = 0; i < 20; i++) document.cookie = i + '= ...

  2. IE10、IE11 User-Agent 导致的 ASP.Net 网站无法写入Cookie 问题

    你是否遇到过当使用一个涉及到Cookie操作的网站或者管理系统时,IE 6.7.8.9下都跑的好好的,唯独到了IE10.11这些高版本浏览器就不行了?好吧,这个问题码农连续2天内遇到了2次.那么,我们 ...

  3. 解决cookie跨域访问

    一.前言 随着项目模块越来越多,很多模块现在都是独立部署.模块之间的交流有时可能会通过cookie来完成.比如说门户和应用,分别部署在不同的机器或者web容器中,假如用户登陆之后会在浏览器客户端写入c ...

  4. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  5. 一个诡异的COOKIE问题

    今天下午,发现本地的测试环境突然跑不动了,thinkphp直接跑到异常页面,按照正常的排错思路,直接看thinkphp的log 有一条 [ error ] [2]setcookie() expects ...

  6. [转载]Cookie/Session的机制与安全

    Cookie和Session是为了在无状态的HTTP协议之上维护会话状态,使得服务器可以知道当前是和哪个客户在打交道.本文来详细讨论Cookie和Session的实现机制,以及其中涉及的安全问题. 因 ...

  7. jquery.cookie的使用

    今天想到了要为自己的影像日记增加赞的功能,并且需要用到cookie. 记得原生的js操作cookie也不是很麻烦的,但似乎jquery更简单,不过相比原生js,需要额外引入2个文件,似乎又不是很好,但 ...

  8. 跨域问题,前端主动向后台发送cookie

    跨域是什么? 从一个域名的网页访问另一个域名的资源,就会出现跨域.只要协议.端口.域名有一个不同就会出现跨域 例如: 1.协议不同  http://www.baidu.com:80 和 https:/ ...

  9. 【流量劫持】沉默中的狂怒 —— Cookie 大喷发

    精简版:http://www.cnblogs.com/index-html/p/mitm-cookie-crack.html 前言 上一篇文章 讲解了如何借助前端技术,打造一个比 SSLStrip 更 ...

  10. 好好了解一下Cookie

    Cookie的诞生 由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的.Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用.比如判断用户是否是第一次访问网站.目前最新 ...

随机推荐

  1. NS10.1 产品技术规范

    NS10.1 产品技术规范 产品技术规范==================4层-7层流量管理 4层负载均衡(LB)        支持的协议TCP,UDP,FTP,HTTP,HTTPS,DNS(TC ...

  2. [洛谷P4722]【模板】最大流 加强版 / 预流推进

    会$TLE$... C++ Code:(HLPP) #pragma GCC optimize(3) #pragma GCC optimize("unroll-loops") #in ...

  3. 【NOIP模拟赛】超级树 DP

    这个题我在考试的时候把所有的转移都想全了就是新加一个点时有I.不作为II.自己呆着III.连一个IV.连接两个子树中的两个V连接一个子树中的两个,然而V我并不会转移........ 这个题的正解体现了 ...

  4. 【NOIP模拟赛】Evensgn 的债务 乱搞

    biubiu~~~ 我们发现按照这道题的题意我们把一个个人的前后(欠钱,被欠钱)都缩一下,那么他对其他人没有影响,那么我们就可以依次缩完每个人,而且每个人最后的状态都是要买欠要么被欠,那么我们可以知道 ...

  5. POJ2236:Wireless Network(并查集)

    Wireless Network Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 39772   Accepted: 164 ...

  6. ng父组件调用子组件的方法

    https://www.pocketdigi.com/20170204/1556.html 组件之间方法的调用统一用中间人调用.数据传递直接input和output即可

  7. sencha touch 模仿tabpanel导航栏TabBar的实现代码

    这篇文章介绍了sencha touch 模仿tabpanel导航栏TabBar的实例代码,有需要的朋友可以参考一下 基于sencha touch 2.2所写 效果图: 代码: /* *模仿tabpan ...

  8. UVa10288概率

    题意: 每张彩票上印有一张图案,要集齐n个不同的图案才能获奖.输入n,求要获奖购买彩票张数的期望(假设获得每个图案的概率相同). 分析: 假设现在已经有k种图案,令s = k/n,得到一个新图案需要t ...

  9. 【BZOJ1468】Tree [点分治]

    Tree Time Limit: 10 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Description 给你一棵TREE,以及这棵树上边的距 ...

  10. javascript学习3

    javascript数据类型.函数传参 javascript语言核心:ECMAScript 定义js的语法:基本对象.数据类型 js的数据类型 typeof运算符  判断数据类型 字符串.数字.布尔. ...