Cookie 的运用
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 的运用的更多相关文章
- 超大 Cookie 拒绝服务攻击
有没有想过,如果网站的 Cookie 特别多特别大,会发生什么情况? 不多说,马上来试验一下: for (i = 0; i < 20; i++) document.cookie = i + '= ...
- IE10、IE11 User-Agent 导致的 ASP.Net 网站无法写入Cookie 问题
你是否遇到过当使用一个涉及到Cookie操作的网站或者管理系统时,IE 6.7.8.9下都跑的好好的,唯独到了IE10.11这些高版本浏览器就不行了?好吧,这个问题码农连续2天内遇到了2次.那么,我们 ...
- 解决cookie跨域访问
一.前言 随着项目模块越来越多,很多模块现在都是独立部署.模块之间的交流有时可能会通过cookie来完成.比如说门户和应用,分别部署在不同的机器或者web容器中,假如用户登陆之后会在浏览器客户端写入c ...
- jquery插件的用法之cookie 插件
一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...
- 一个诡异的COOKIE问题
今天下午,发现本地的测试环境突然跑不动了,thinkphp直接跑到异常页面,按照正常的排错思路,直接看thinkphp的log 有一条 [ error ] [2]setcookie() expects ...
- [转载]Cookie/Session的机制与安全
Cookie和Session是为了在无状态的HTTP协议之上维护会话状态,使得服务器可以知道当前是和哪个客户在打交道.本文来详细讨论Cookie和Session的实现机制,以及其中涉及的安全问题. 因 ...
- jquery.cookie的使用
今天想到了要为自己的影像日记增加赞的功能,并且需要用到cookie. 记得原生的js操作cookie也不是很麻烦的,但似乎jquery更简单,不过相比原生js,需要额外引入2个文件,似乎又不是很好,但 ...
- 跨域问题,前端主动向后台发送cookie
跨域是什么? 从一个域名的网页访问另一个域名的资源,就会出现跨域.只要协议.端口.域名有一个不同就会出现跨域 例如: 1.协议不同 http://www.baidu.com:80 和 https:/ ...
- 【流量劫持】沉默中的狂怒 —— Cookie 大喷发
精简版:http://www.cnblogs.com/index-html/p/mitm-cookie-crack.html 前言 上一篇文章 讲解了如何借助前端技术,打造一个比 SSLStrip 更 ...
- 好好了解一下Cookie
Cookie的诞生 由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的.Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用.比如判断用户是否是第一次访问网站.目前最新 ...
随机推荐
- 【转】C#获取当前路径7种方法
webformvar s = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName; //C盘 IIS路径 var s1 ...
- [NOI2010]能量采集 解题报告
[NOI2010]能量采集 题目描述 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. ...
- 【NOIP模拟赛】书 数学+期望概率
biubiu~~~ 对于这道傻题.........我考场上退了一个多小时才推出来这个东西是排列...........然后我打的dfs效率n!logInf正好n=9是最后一个能过的数结果前三个点的n全是 ...
- [BZOJ3594] [Scoi2014]方伯伯的玉米田 二维树状数组优化dp
我们发现任何最优解都可以是所有拔高的右端点是n,然后如果我们确定了一段序列前缀的结尾和在此之前用过的拔高我们就可以直接取最大值了然后我们在这上面转移就可以了,然后最优解用二维树状数组维护就行了 #in ...
- 使用adobe pdf去除PDF文档中的批量雷同文本
一.问题的提出 MgoSoft tiff to pdf软件没有提供中国地区的非VISA用户的购买渠道,中国通常都是银联标识走天下,卡不是VISA买不了这样的软件, 那么, MgoSoft tiff t ...
- MySQL里执行SHOW INDEX结果中Cardinality的含义
今天在写一个Perl脚本,想自动化查找出MySQL数据库中可能无效的索引,于是根据朝阳的书上提到的一些规则,我来设计了一些判断方法,其中发现某个我想要的值就是SHOW INDEX FROM table ...
- [hdu 2102]bfs+注意INF
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 感觉这个题非常水,结果一直WA,最后发现居然是0x3f3f3f3f不够大导致的……把INF改成I ...
- centos6上使用fpm打python2.7 rpm包并兼容python2.6
centos6上使用fpm打python2.7 rpm包并兼容python2.6 作者 运维小兵_加油 关注 2016.09.22 00:28 字数 501 阅读 45评论 0喜欢 1 工作中我们常常 ...
- egrep对于conf文件中去掉#注释,排除无用项
[root@localhost conf]# egrep -v "#|^$" nginx.conf.default > nginx.conf dd
- Java面向对象编程三大特性 --- 多态
多态特性: 子类Child继承父类Father,我们可以编写一个指向子类的父类类型引用,该引用既可以处理父类Father对象,也可以处理子类Child对象,当相同的消息发送给子类或者父类对象时,该对象 ...