会话技术cookie

 

因为Http是无状态的需要会话技术来区别客户端是谁发送的请求

会话技术(响应头是设置cookie的,请求头是携带cookie值的):是从打开一个浏览器直到关闭这个浏览器为止整个过程是一次会话,会话技术就是记录客户端的状态和数据的

会话技术分为:Cookie和Session;Cookie(在客户端存储数据,也就是缓存,缓解服务器压力但是不安全):数据存储在客户端本地,减少服务器端存储的压力,不安全,客户端可以清楚Cookie

Session(单独在服务器开辟一块内存区域,加重了服务器压力,但是安全):将数据存储在服务器端,安全性相对较好,增加服务器压力

创建Cookie(以键值对的形式存数据,不能存中文,关闭浏览器后Cookie消失):Cookie cookie=new Cookie(String CookieName,String CookieValue);

Cookie在客户端持久化(Cookie自动向服务器端发送信息,但是服务器端需要去接收不然没有用):cookie.setMaxAge(120(时间:持续2分钟))如果不设置持久化时间,cookie会存储在浏览器内存中,关闭浏览器,cookie就会销毁(会话级别的cookie),如果设置了持久化时间,cookie信息会被持久化到浏览器的磁盘文件夹(就是浏览器的安装路径)

创建cookie对象:Cookie cookie=new Cookie("name","小明");以键值对的形式存进cookie

设置cookie的持久化时间:cookie.setMaxAge(120);这里的时间单位是秒

将cookie发送到客户端:response.addCookie(cookie)

第一次请求的时候,请求头是没有cookie的因为cookie得需要服务器取创建,所以第一次的响应头有cookie二请求头 没有cookie

第二次请求服务器的时候,因为第一次已经把cookie传给了浏览器所以第二次访问服务器就会携带cookie(因为是 第一次服务器给的)

cookie.setPath("/WEB0917");这里个是WEB0917下的资源都携带

cookie.setPath("/");这个是只要访问服务器下的所有资源都携带

cookie.setPath();如果不设置携带路径:当你访问产生改cookie的路径的路径携带

删除cookie:因为cookie不能删除只能设置一个持久是0的同名且同路径的cookie代替了并删除原来的cookie

删除cookie

Cookie cookie=new Cookie("goods","iphone11");

//设置持久化时间为0

cookie.setMaxAge(0);//设置0是立马删除cookie;关闭浏览器是结束一次会话,不一样

cookie.setPath("/WEB0917");//这里的路径要和创建的cookie的路径一样

//删除的条件是,两个cookie的名字和路径要一样,且第二个cookie的持续时间要是0;这样就删除了

//发送cookie

response.addCookie(cookie);//用这个持久是0的cookie把同名路径的持久时间长的cookie给代替掉,0时间也就删除了

//获取Cookie从request对象中获取Cookie数组

Cookie[] cookies=request.getCookies();

for(Cookie c:cookies){

if(c.getName().equals("goods")){//这里是通过.getName()得到name并用.equals("goods")比较确定

System.out.println(c.getValue());//如果是goods就取出值 }}

 

 

每次访问显示上次访问的时间

//创建日期对象,记录当前访问时间
Date date=new Date();
//转换日期格式
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//获取转换后的日期字符串
String currentTime=sdf.format(date);
//创建cookie对象
//因为cookie只能传英文所以上面dsf的格式是"yyyy-MM-dd HH:mm:ss"
Cookie cookie=new Cookie("LastTime",currentTime);
//设置持久化时间
cookie.setMaxAge(60*10);
//发送cookie
response.addCookie(cookie);
//获取客户端携带的cookie --LastTime
Cookie[] cookies=request.getCookies();
String lasttime=null;
//遍历获取name是lasttime的cookie对象中的value值
if(cookies!=null){ //这里得加一个cookies是null的判定,如果不是null才能遍历,不然这个数组是空的会报空指针异常
for(Cookie c:cookies){
if(c.getName().equals("LastTime"));
lasttime=c.getValue();
}
}
//解决中文乱码
response.setContentType("text/html;charset=UTF-8");
if(lasttime==null){
response.getWriter().write("您是第一次访问");
}else{
response.getWriter().write("您上次访问的时间是:"+lasttime);
}

转载于:https://www.cnblogs.com/axu-xxx/p/11597765.html

你可能感兴趣的:(会话技术cookie)