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中的状态信息,以方便服务器端使用.比如判断用户是否是第一次访问网站.目前最新 ...
随机推荐
- 【题解】HEOI2013Eden 的新背包问题
这题真的神奇了……蜜汁复杂度(`・ω・´) 应该是一个比较连贯的思维方式:去掉一个物品,那么我们转移的时候不考虑它就好了呗.考虑暴力:每一次都对剩余的n - 1个物品进行多重背包转移,获得答案.既然可 ...
- Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) C (用map 超时)
C. Bear and Colors time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- POJ1459:Power Network(多源点多汇点的最大流)
Power Network Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 31086 Accepted: 15986 题 ...
- oralce的客户端sqlplus
安装完oracle后,默认的客户端是sqlplus,还有一个公司常用的是PLSQLdeveloper 客户端软件,另外Navicat primie这个可以连接mysql.sqlserver.oracl ...
- mysql__视图
视图 1.什么是视图 视图是一种虚拟存在的表,对于使用视图的用户来说基本上是透明的.视图并不是在数据库中实际存在的,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的 视图相对于普通 ...
- Lesson 2
周末重新学习了一下java,有了些新的体会 1.关于jdk, jre,and JVM: Jdk: java development kit,面向开发人员的java开发工具包 Jre:java run ...
- 51Nod 1081前缀和
#include <iostream> #include <stdio.h> using namespace std; ]; ]; int main() { int n; ci ...
- 51 Nod 1013 3的幂的和 矩阵链乘法||逆元+快速幂
这道题我写了两种写法 一种利用逆元 a/b%mod=a*c%mod; (c是b的逆元)易得2的逆元就是5~~~04: 一种是矩阵快速幂 利用递推式得出结论 #include<cstdio> ...
- Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?
Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节 ...
- Linux emacs考场配置及对拍脚本
emacs配置(待补) (global-set-key [f9] 'compile) (global-set-key [f10] 'gud-gdb) (global-set-ket (kbd &quo ...