cookie&&session

Cookie的笔记:

  1. cookie:

1.1:cookie的定义:

Cookie:其实是一份数据,是服务器给客户端,并且存储在客户端上的一份小数据

1.2:应用场景:

应用场景:

自动登录、浏览记录,购物车

1.3:为什么使用Cookie

1、http的请求是无状态的。客户端与服务器在通讯的时候是无状态的。其实就是客户端在第二次来访的时候,服务器根本就不知道这个客户端有没有来访过。为了更好地用户体验,更好地交互。

 

 1.4:cookie有什么作用?

1.4.1:添加cookie到客户端:

  1. 在响应的时候,添加cookie
  2. 客户端收到的信息里面,响应头多了一个字段。

response.setContentType("text/html;charset=UTF-8");

//发送给cookie到客户端

Cookie cookie=new Cookie("a","bb");

//给响应数据添加一个cookie

response.addCookie(cookie);

response.getWriter().write("请求成功了");

 

1.4.2:获取客户端带过来的Cookie

//获取客户端带回来的cookie

Cookie[] cookies = request.getCookies();

//不能直接遍历。,因为第一次是没有带回来Cookie,就会返回null,所以需要进行判断

if(cookies!=null){

for (Cookie c : cookies) {

String cookieName=c.getName();

String cookieValue=c.getValue();

System.out.println(cookieName+"="+cookieValue);

}

}

 

 

1.5:cookie的API

常用的方法:

//关闭浏览器,cookie就没有了---针对cookie设置有效的期限

//参数:以秒为单位的,设置生存时间:7天:60*60*24*7

//正值:表示这个数字数字过后,cookie将会失效

//负值:关闭浏览器,那么cookie就会失效,默认值是-1

cookie.setMaxAge(60*60*24*7);

//赋值新的值

//cookie.setValue("lisi");

//只有访问该域名下的cookieDemo的这个路径地址才会带cookie

cookie.setPath("/CookieDemo");

例子:

// 先获取Cookie的值,首先判断有没有cookie,如果是第一次,客户端没有带回来cookie

Cookie[] cookies = request.getCookies();

if (cookies != null) {

for (Cookie c : cookies) {

System.out.println(c.getName() + "=" + c.getValue());

}

}

 

// 1、添加Cookie,可以给客户端返回多个cookie

Cookie cookie = new Cookie("name", "zhangsan");

// 2、这个cookie的有限期,默认情况下:

// 关闭浏览器,cookie就没有了---针对cookie设置有效的期限

// 参数:以秒为单位的,设置生存时间:7天:60*60*24*7

// 正值:表示这个数字数字过后,cookie将会失效

// 负值:关闭浏览器,那么cookie就会失效,默认值是-1

cookie.setMaxAge(60 * 60 * 24 * 7);

 

// 赋值新的值

// cookie.setValue("lisi");

// 只有访问该域名下的cookieDemo的这个路径地址才会带cookie

cookie.setPath("/CookieDemo");

 

// 在响应,添加cookie

response.addCookie(cookie);

// 添加Cookie

Cookie cookie1 = new Cookie("password", "123");

// 在响应,添加cookie

response.addCookie(cookie1);

response.getWriter().write("hello cookie");

 

 

1.6:案例:回显上次访问的时间

显示最近访问的时间

  1. 判断账号和密码是否正确
  2. 如果正确,则获取cookie,但是得到的cookie是一个数组,我们要从数组中找到我们想要的cookie对象
  3. 如果找到的对象为空,则表明是第一次登录,那么要添加cookie(“last’,时间戳)
  4. 如果找到的对象不为空,则表明不是第一次登录。

CookieUtil.java:

public static Cookie findCookie(Cookie[] cookies,String name){

//从cookie数组中找到我们想要的cookie对象

if(cookies!=null){

for (Cookie cookie : cookies) {

if(name.equals(cookie.getName())){

return cookie;

}

}

}

return null;

}

EchoLoginTime.java:

request.setCharacterEncoding("UTF-8");

String username=request.getParameter("username");

String password=request.getParameter("password");

response.setContentType("text/html;charset=UTF-8");

if("张三".equals(username)&&"123".equals(password)){

//获取cookie

Cookie[] cookies=request.getCookies();

 

//从数组中找到我们想要的cookie对象

Cookie cookie = CookieUtil.findCookie(cookies,"last");

//是第一次登录。没有cookie

if(cookie==null){

//给客户端添加一个cookie

Cookie c=new Cookie("last",System.currentTimeMillis()+"");

c.setMaxAge(60*60);//一个小时

response.addCookie(c);

response.getWriter().write("欢迎您:"+username);

 

}else{

//第二次登录,有cookie

long l =Long.parseLong(cookie.getValue());

response.getWriter().write("欢迎您:"+username+"上次来访时间是:"+new Date(l));

//3、重置上面的值

cookie.setValue(System.currentTimeMillis()+"");

response.addCookie(cookie);

}

 

}else{

response.getWriter().write("登录失败");

}

 

 

 

1.7:案例:商品浏览记录

1、把资料复制到webcontent下

2、新建一个jsp文件,product_list.jsp,然后复制product_list.htm内容到jsp中

3、修改product_info.html里面的手机数码的超链接

<a href="product_list.jsp">手机数码<span class="sr-only">(current)</span></a>

4、修改首页(index.html)顶部的手机数码位置为product_list.jsp

Servlet.java:

//用户准备浏览的商品的id

String id=request.getParameter("id");

//创建Cookie

Cookie[] cookies=request.getCookies();

Cookie cookie = CookieUtil.findCookie(cookies, "history");

//代表第一次浏览

if(cookie==null){

//1、响应加入cookie

Cookie c=new Cookie("history",id);

//设置生存时间

c.setMaxAge(60*60);

//设置访问这个工程的时候,才把cookie带回来

c.setPath("/sessionandcookie");

response.addCookie(c);

//跳转

response.sendRedirect("product_info.htm");

}

//第二次浏览

else{

//获取以前的cookie,得到的浏览浏览记录,ids

String ids= cookie.getValue();

//让现在浏览的商品,和以前旧的商品,形成一个新的cookie的值

cookie.setValue(id+"#"+ids);

//设置生存时间

cookie .setMaxAge(60*60);

//设置访问这个工程的时候,才把cookie带回来

cookie .setPath("/sessionandcookie");

response.addCookie(cookie);

response.sendRedirect("product_info.htm");

}

 

Jsp:

<%

Cookie[] cookie = request.getCookies();

Cookie cook = CookieUtil.findCookie(cookie, "history");

if(cook == null){

%>

<h2>您还没浏览任何商品</h2>

 

<%

}else{

String [] id = cook.getValue().split("#");

for(String i : id){

%>

<li style="width: 150px;height: 216;float: left;margin: 0 8px 0 0;padding: 0 18px 15px;text-align: center;">

<img src="products/1/cs1000<%=i %>.jpg" width="130px" height="130px" />

</li>

<%

}

}

 

%>

 

如何清除cookie:

其实就是清除cookie,删除cookie,是没有什么delete方法的,只有设置setMaxAge(0)就可以删除了

//清除cookie

Cookie c=new Cookie("history","");

//立即删除cookie

c.setMaxAge(0);

//设置访问这个项目,把cookie带回来

c.setPath("/sessionandcookie");

//添加到响应中

response.addCookie(c);

//跳转

response.sendRedirect("product_list.jsp");

 

1.8:cookie的总结:

1、服务器给客户端发送过来的一份小数据,并且存储在客户端上。

2、获取cookie,添加cookie

Request.getCookie();

Request.addCookie();

3、cookie的分类:

会话Cookie:

默认情况下,关闭了浏览器,那么cookie就会消失

持久cookie

在一定时间内,都有效,并且会保存在客户端上。

c.setMaxAge(0);//设置立即删除

c.setMaxAge(100);//100秒后,cookie失效

4、Cookie的安全问题:

由于cookie会保存在客户端上,所以有安全隐藏问题,还有一个问题,cookie的大小与个数有限,为了解决这个问题,我们使用下面学到的session

 

Session笔记:

  1. Session

会话,session是基于cookie的一种会话机制,cookie是服务器返回一小份数据给客户端,并且存放在客户端上,session是,数据存放在服务端。

 

  1. session的常用API

//创建session对象

HttpSession session = request.getSession();

//得到会话id

String id = session.getId();

//存值

//session.setAttribute("", value);

//取值

//session.getAttribute(name);

//移除元素

//session.removeAttribute(name);

  1. 案例:简单的案例

Session何时创建,何时销毁?

创建:

   r如果在servlet里面调用了这一行代码:HttpSession session=request.getSession();

销毁:

Session:是存放在服务器的内存中的一份数据,当然可以持久化。

即使关闭浏览器也不会被销毁,

  1. 关闭服务器
  2. Session会话时间过期。有效期过期。默认时间是30分钟。服务器规定 的

4、案例:简单购物车

购物车分析:

案例代码:详见sessionandcookie

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值