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的主要内容,如果未能解决你的问题,请参考以下文章

cookie,session,token的定义及区别

session和cookie

cookie和session

Cookie和Session_会话技术

cookie和session的关系及细节操作及总结

一篇文章带你走进cookie,session,Token的世界