首页 > 代码库 > Cookie

Cookie

1.会话控制
> Http协议
Http协议两个缺陷:
1.HTTP协议是纯文本的
2.HTTP协议是无状态的
服务器不能简单的通过HTTP协议来区分多次请求是否发自同一个用户
虽然通过HTTP协议不能区分不同请求是否来同一用户,但是我们实际生活却有这样的需求。
 
[1] Cookie
> 看电影
- 去电影院看电影时,检票人员是认票不认人。
- 电影院的运作流程
1.印刷电影票
2.将票发给看电影
3.看电影的拿着票来看电影
4.检票
 
> 简介
- 我们想可以通过服务器向浏览器发送一个类似票的东西,
浏览器在访问服务器时就可以拿着票来访问
服务器就可以根据这个票来识别不同的用户。
 
- 服务器发送给浏览器的这张票我们称为Cookie。
- Cookie的使用流程:
1.服务器先要创建Cookie
2.将Cookie发送给浏览器
3.浏览器带着Cookie访问服务器
4.服务器检查浏览器的Cookie
 
- Cookie实际上就是一个头
服务器通过响应头将Cookie发送给浏览器,
浏览器通过请求头将Cookie发回给服务器,
服务器可以根据不同的Cookie来识别不同的用户。
 
> 使用Cookie
- Cookie cookie = new Cookie(name,value);
- response.addCookie(cookie);
注意:可以发送多个cookie!
Cookie cookie1=new Cookie("key1", "zhang");
 Cookie cookie2=new Cookie("key2", "li");
 response.addCookie(cookie1);
 response.addCookie(cookie2);

  request.getCookies(); 返回的是一个Cookie数组。

- 虽然Cookie是一个键值对结构,但是它并没有给咱们提供一个根据键获取值的方法。
//Cookie的遍历与取值、改值
 Cookie [] cookies =request.getCookies();
 
 for (Cookie cookie : cookies) {         //for循环遍历
 if ("username".equals(cookie.getName())) {  //通过getName取值
 cookie.setValue("lisi");      //通过setValue改值
 response.addCookie(cookie);
 }
 
 }

 

 

- 修改Cookie
一旦Cookie发给浏览器以后,服务器便不能直接修改Cookie,
但是可以通过使用同名Cookie来替换的老Cookie方式来间接的修改
 > Cookie的有效时间
- Cookie的默认有效时间为一次会话,当关闭浏览器时,Cookie将失效。
- 通过setMaxAge(秒数)来设置Cookie的有效时间
-//当秒数大于0时,有效时间会设置为相应的秒数
cookie.setMaxAge(30);
cookie.setMaxAge(0);

 

- 设置一个长久有效的Cookie
cookie.setMaxAge(60*60*24*365*10)
 
- 在程序中使Cookie立即失效
- 可以使用一个同名的,立即失效的Cookie来替换已有Cookie
 Cookie cookie1=new Cookie("key1", "zhang");
 Cookie cookie2=new Cookie("key2", "li");
 cookie1.setMaxAge(0);
 response.addCookie(cookie1);
 response.addCookie(cookie2);
在第二次访问时,请求头中 没有cookie1的信息
 
> Cookie的Path
- path指的Cookie的路径()
- 所谓的Cookie路径就是指, - Cookie
 
访问/WebCookie/1.js (在不设置cookie路径 ,访问同一项目的其他页面也会带着Cookie信息)
 
p
- 通过setPath()方法来设置Cookie有效路径
//修改Cookie的有效路径
//Cookie的路径由浏览器解析,所以设置路径时需要加上项目名
cookie.setPath(request.getContextPath()+"/hello");
Cookie cookie1=new Cookie("key1", "zhang");
 Cookie cookie2=new Cookie("key2", "li");
 
 cookie1.setMaxAge(0);
 cookie2.setPath(request.getContextPath()+"/1.jsp");
 response.addCookie(cookie1);
 response.addCookie(cookie2);

 

 

访问1.jsp的页面带cookie信息
技术分享
index.jsp 的请求不带cookie信息
技术分享
 
> 应用:
1.可以用来保持用户的登录状态
2.可以用来记录用户上次输入的用户名
3.广告的推送
 
> Cookie练习
> 模拟一个taobao的功能,保存用户输入用户名。
> 用户在login.jsp输入用户名和密码
> 请求发送个LoginServlet
> LoginServlet收到请求行,检查用户名和密码是否正确。(默认登录成功)
如果正确,则将用户名保存到一个Cookie中,并发送给浏览器 ,重定向到login-success.jsp
如果错误,转发到login.jsp
 
//Jsp
<form action="${pageContext.request.contextPath}/cookie" method="get">
 用户名:<input type="text" name="username" value=http://www.mamicode.com/${cookie.value}>
"password" name="pwd" ><br> <input type="submit" value="http://www.mamicode.com/登录"> </form>
//servlet中
Cookie cookie=new Cookie("username", "zhangsan");
 response.addCookie(cookie);
 String username = request.getParameter("username");
 String pwd = request.getParameter("pwd");
 if (username.equals(cookie.getValue())) {
 response.sendRedirect(request.getContextPath()+"/1.jsp");
 }
 }

 只是简单的模仿一下,只是用于记录这个知识点。

 
 

 

 

Cookie