JavaWeb快速入门-Cookie与Session

//3.获取cookie的名称

String name = cookie.getName();

//4.判断名称是否是:lastTime

if(“lastTime”.equals(name)){

//有该Cookie,不是第一次访问

flag = true;//有lastTime的cookie

//设置Cookie的value

//获取当前时间的字符串,重新设置Cookie的值,重新发送cookie

Date date = new Date();

SimpleDateFormat sdf = new SimpleDateFormat(“yyyy年MM月dd日 HH:mm:ss”);

String str_date = sdf.format(date);

System.out.println(“编码前:”+str_date);

//URL编码

str_date = URLEncoder.encode(str_date,“utf-8”);

System.out.println(“编码后:”+str_date);

cookie.setValue(str_date);

//设置cookie的存活时间

cookie.setMaxAge(60 * 60 * 24 * 30);//一个月

response.addCookie(cookie);

//响应数据

//获取Cookie的value,时间

String value = cookie.getValue();

System.out.println(“解码前:”+value);

//URL解码:

value = URLDecoder.decode(value,“utf-8”);

System.out.println(“解码后:”+value);

response.getWriter().write(“

欢迎回来,您上次访问时间为:”+value+“

”);

break;

}

}

}

if(cookies == null || cookies.length == 0 || flag == false){

//没有,第一次访问

//设置Cookie的value

//获取当前时间的字符串,重新设置Cookie的值,重新发送cookie

Date date = new Date();

SimpleDateFormat sdf = new SimpleDateFormat(“yyyy年MM月dd日 HH:mm:ss”);

String str_date = sdf.format(date);

System.out.println(“编码前:”+str_date);

//URL编码

str_date = URLEncoder.encode(str_date,“utf-8”);

System.out.println(“编码后:”+str_date);

Cookie cookie = new Cookie(“lastTime”,str_date);

//设置cookie的存活时间

cookie.setMaxAge(60 * 60 * 24 * 30);//一个月

response.addCookie(cookie);

response.getWriter().write(“

您好,欢迎您首次访问

”);

}

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

this.doPost(request, response);

}

}

Session学习


Cookie技术可以将用户的信息保存在各自的浏览器中,并且可以在多次请求下实现数据的共享。但是,如果传递的信息比较多,使用Cookie技术显然会增大服务器端程序处理的难度。这时,可以使用Session实现,Session是一种将会话数据保存到服务器端的技术。

对象操作:

我们这里说的session其实上是一个接口(javax.servlet.http.HttpSession),我们可以把一个会话内需要共享的数据保存到HttSession对象中,然后我们只需要获取HttpSession对象即可。

获取对象:

  • HttpSession request.getSesssion():如果当前会话已经有了session对象那么直接返回,如果当前会话还不存在会话,那么创建Session并返回

  • HttpSession request.getSession(boolean):当参数为true时,与requeset.getSession()相同。如果参数为false,那么如果当前会话中存在Session则返回,不存在返回null

对象的相关方法:

  • 用来存储一个对象,也可以称之为存储一个域属性: void setAttribute(String name, Object value)

  • 获取session中的数据: Object getAttribute(String name)

  • 移除HttpSession中的域属性: void removeAttribute(String name)

  • 获取所有域属性的名称: Enumeration getAttributeNames()

//在Session中存、取、删数据

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//获取Sesseion对象

HttpSession session=request.getSession();

session.setAttribute(“username”, “zhangsan”);//存储数据

session.getAttribute(“username”);//获取数据

session.removeAttribute(“username”);//删除数据

}

Session执行原理

  • Session底层是依赖Cookie实现的,其本身是一个服务器端对象,用于存储一次会话的多次请求的数据,当首次使用session时,服务器端要开辟一个存储数据的空间(在这个空间中可以存储任意类型,任意大小的数据),将session保存在服务器端,同时给客户端一个用cookie保存的session的id,客户端带走的是sessionId,而数据是保存在session中。当客户端再次访问服务器时,在请求中会带上sessionId,而服务器会通过sessionId找到对应的session,而无需再创建新的session。

  • 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:默认情况下一个浏览器独占一个session对象。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。

Session的销毁

  • Session保存在服务器,而SessionId通过Cookie发送给客户端,但这个Cookie的生命不为-1,即只在浏览器内存中存在,也就是说如果用户关闭了浏览器,那么这个Cookie就丢失。如果用户再次打开浏览器访问服务器时,就不会有sessionId发送给服务器,那么服务器会认为你没有session,所以服务器会创建一个session,并在响应中把sessionId保存到Cookie中发送给客户端。

  • 当客户端关闭后,session会被销毁,如果我们想要保存这个session对象的话,我们可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存:

Cookie c = new Cookie(“JSESSIONID”,session.getId());

c.setMaxAge(60*60);

response.addCookie©;

只要浏览器容器不关闭,无论访问服务器多少次,使用的都是同一个session对象,因为我们的tomcat服务器为了去报数据不会丢失会将数据进行钝化(在服务器正常关闭之前,将session对象系列化到硬盘上)当服务器再次启动后,服务器会进行活化处理(session文件转化为内存中的session对象)。

当一个session长时间没人使用的话,服务器会把session删除了!这个时长在Tomcat中配置是30分钟,可以在${CATALANA}/conf/web.xml找到这个配置,也可以在自己的web.xml中覆盖这个配置!

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

总结

在清楚了各个大厂的面试重点之后,就能很好的提高你刷题以及面试准备的效率,接下来小编也为大家准备了最新的互联网大厂资料。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

92385296)]

总结

在清楚了各个大厂的面试重点之后,就能很好的提高你刷题以及面试准备的效率,接下来小编也为大家准备了最新的互联网大厂资料。

[外链图片转存中…(img-00VLXH9J-1710692385296)]

[外链图片转存中…(img-ORG8wU03-1710692385296)]

[外链图片转存中…(img-oLVq540G-1710692385297)]

[外链图片转存中…(img-JUN85xep-1710692385297)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值