Cookie
cookie工作的原理
Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。
Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookies的功用。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入Cookies,以便在最后付款时提取信息。
Cookie适用于那些需要跨越许多页面的信息。
Cookie是属于浏览器端的技术。
Cookie的原理:把共享数据存储在浏览器中.
每次请求,再把共享数据带到服务端
怎么使用cookie
①创建cookie
代码实例:
protected void service(HttpServletRequest req, HttpServletResponse resp) throws Exception{
//设置编码
req.setCharacterEncodeing("UTF-8");
resp.setContentType("text/html;charset=utf-8");
//拿到传过来的数据
String date = req.getParameter("name");
//创建一个cookie,并将获取的信息保存到cookie中
Cookie cookie = new Cookie("name",date);
//将cookie发送到浏览器
resp.addCookie(cookie);
}
通常cookie会在Http头信息中传递给浏览器
HTTP/1.1 200 OK
Set-Cookie: name=xyz;
Content-Type: text/html
浏览器中的cookie也是通过请求头的方式传递到服务器
Cookie:name=xyz;
②得到cookie
//拿到浏览器传过来的Cookie数组
Cookie[] cookies = req.getCookies();
//如果数组不为空则遍历数组找到我们需要的值
if(cookies!=null){
//遍历
for(Cookie cookie:cookies){
//获取cookie的名称
String cookieName = cookie.getName();
//如果cookieName等于需要的值的名称则取出
if(cookieName.equals("name")){
//得到需要找到的值
String name = cookie.getValue();
}
}
}
③解决中文问题
好像Cookie是不支持中文的(怎么办)
我们就需要进行编码与解码……
在WEB程序中怎么解决:
编码:
String text = "这是一串中文字符";
//对该字符串进行编码处理
String text_encode = URLEncoder.encode(text,"UTF-8");
解码:
String text = URLDecode.decode(text_encode,"UTF-8");
在 Tomcat7中,也是不支持中文的
④修改Cookie
修改cookie的第一种方式
拿到原来的cookie,设置它的value→cookie.setValue(“xxxxxxxxxx”)
代码示例:
//拿到浏览器传过来的Cookie数组
Cookie[] cookies = req.getCookies();
//如果数组不为空则遍历数组找到我们需要的值
if(cookies!=null){
//遍历
for(Cookie cookie:cookies){
//获取cookie的名称
String cookieName = cookie.getName();
//如果cookieName等于需要的值的名称则取出
if(cookieName.equals("name")){
//设置cookie的值
cookie.setValue("xxxxxxxxx");
//将修改后的cookie发送给浏览器
resp.addCookie(cookie);
}
}
}
修改cookie的第二种方式
创建一个和原来名称相同的cookie,将它扔给浏览器就可以把原来的cookie重写了
//创建一个新的cookie
Cookie cookie = new Cookie("name","xxxxxx");
//将创建的同名cookie发送给浏览器覆盖前一个cookie
resp.addCookie(cookie);
⑤删除Cookie
Java并没有提供删除Cookie给我们,所以只有设置他的生命周期以尝试达到销毁cookie的目的
cookie.setMaxAge(0);
⑥Cookie的生命周期
创建:Cookie在服务器创建之后放到浏览器中
销毁:如果没有设置setMaxAge关闭浏览器
我们可以自己去设置Cookie的存在时间
cookie.setMaxAge(int second);
//设置存在时间为一周
cookie.setMaxAge(60 * 60 * 24 * 7);
//将设置好的cookie发送到浏览器
resp.addCookie(cookie);
关于setMaxAge(int second)方法的参数设置
正数:代表多少秒
为零:就代表删除
负数:关闭浏览器时删除
思考题:Cookie可以在什么时候使用?
⑦cookie的问题与好处
Cookie的问题
- 它还是不安全(cookie存在客户端)
- 操作中文太麻烦了
- Cookie依然是有限制的
- . Cookie大小限制在4KB之内;
- . 一台服务器在一个客户端最多保存20个Cookie;
- . 一个浏览器最多可以保存300个Cookie;
- Cookie不能操作对象
Cookie的好处:可以设置保存很长的时间