//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);
}
}
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开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
总结
在清楚了各个大厂的面试重点之后,就能很好的提高你刷题以及面试准备的效率,接下来小编也为大家准备了最新的互联网大厂资料。
92385296)]
总结
在清楚了各个大厂的面试重点之后,就能很好的提高你刷题以及面试准备的效率,接下来小编也为大家准备了最新的互联网大厂资料。
[外链图片转存中…(img-00VLXH9J-1710692385296)]
[外链图片转存中…(img-ORG8wU03-1710692385296)]
[外链图片转存中…(img-oLVq540G-1710692385297)]
[外链图片转存中…(img-JUN85xep-1710692385297)]