Session和Cookie
Posted Viola_tt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Session和Cookie相关的知识,希望对你有一定的参考价值。
这里写自定义目录标题
一、从问题开始
1.1 Session是什么?
1.2 Session何时创建,何时销毁,存在哪里?
1.3Session和JSession的区别
1.4 Session和Cookie,Cookie存在哪里,生命周期是什么
二、Session
2.1在哪里创建,何时创建?
sessionId是一个会话的key,浏览器第一次访问服务器时会在服务器端生成一个session对象,这个session对象的标识就是sessionId,tomcat对应的sessionId有他自己的叫法是JSeesionId,其实是一个东西。
tomcat是我们常用并且熟悉的应用服务器,我们知道,每当我们发起一次http请求,get请求或是post请求,会经过tomcat的dofilter,过滤器当中第一次调用request.getSession()时会进行判断当前会话中是否有session,如果有直接返回,如果没有则会创建一个新的不冲突的sessionId对象,同时将sessionId通过response返回给客户端。
总结一下上面说的几点1.session是由服务器端创建的(request.getSession()),服务器端会存有session对象。2.客户端通过request.doGet(HttpServletRequest request,HttpServletResponse response)时服务器端会返回给客户端session,通过存入Cookie中,源码如下:
@Override
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
String cookieName = request.getParameter("cookiename");
String cookieValue = request.getParameter("cookievalue");
......
3.也就是说我们使用tomcat应用服务器的话,当我们一次请求成功后会在cookie中存入当前会话的sessionId。
2.1 何时销毁?
session的销毁有一下几种情况 1.调用invalidate() 2.当前的session对象到期,session对象的默认存储时间是30分钟。3.服务器进程被终止。当然我们可以设置session的过期时间,在tomcat的web.xml中
<session-config>
<session-timeout>30</session-timeout>
</session-config>
三、Cookie
HTTP的特性:无状态的,前后两个http事务他们不知道对方的信息,为了维护会话信息或用户信息,可以使用Cookie缓存信息。Cookie是存在客户端的,通过下面的图片,直观的了解一下。
3.1 当前会话关闭session对象会消失吗?
当前会话关闭时,浏览器中存有的cookie会消失,随之cookie中保存的sessionId便没有了,但是服务器端仍然会有session对象,只是此时发送http请求时,已经没有带着sessionId了,因此也无法获取服务器端对应的session对象,这时服务器端的会重新分配一个sessionId。
四、后续
其实该篇文章有几个知识点没有详细的介绍,1.session是如何创建的,2.sesson是如何返回的?感兴趣的可以看org.apache.catalina.connector.Request.doGetSession(boolean create)和org.apache.catalina.session.ManagerBase.createSession(String sessionId)中的代码,之后小编有精力也会学习这方面的内容。
同时这篇文章的的灵感来源于一下文章,感谢作者的辛苦劳动。
https://www.cnblogs.com/nick-huang/p/6660232.html
https://blog.csdn.net/java_faep/article/details/78082802
以上是关于Session和Cookie的主要内容,如果未能解决你的问题,请参考以下文章