Cookie和Session的关系(个人理解)

之前,总是使用SessionCookie接触的比较少,通过这次的项目,使我了解了,这两者的关系与用法。首先先简单聊几句两者的概念:

Session是客户端与服务器的会话,session是存储在服务器端的。通常用户登录之后,用户信息存储在session之中。Session在服务器中是有生命周期的。可以在web.xml中进行配置。默认应该是30分钟。

Cookie是存储在客户端之中的。Cookie存储的是sessionID

下面我通过一个实例,来介绍一下这两者。一个用户登录的例子,虽然例子很简单,但是能真正做好的,还真不容易。

首先服务器启动,通过index.jsp会默认跳转到ProfileSvl.java中,这个类作为系统的入口,主要作用是验证用户是否登录过。希望达到一个效果,第一次登录,是登录页面。登录过之后在规定时间之内再登陆,跳过登录页面,直接到主页。

ProfileSvl.java中主要语句如下:

    if(request.getSession().getAttribute("user") != null)

    {

request.getRequestDispatcher("productSvl").

forward(request, response);

    }

    else

       request.getRequestDispatcher("login.jsp").

forward(request, response);

对这个部分解释一下:因为用户访问服务器就会生成一个session并且生成一个SessionID,返回给客户端。客户端的Cookie会自动的记录SessionID。下一次如果客户端与服务器再次建立连接,客户端会Cookie携带SessionID访问服务器。这个时候,就可以通过request.getSession().getAttribute("user")这个方法来判断服务器中这个session是否保存了user这个信息。因为如果第一次登录之后,会在服务器中session部分,建立user映射。

注意:下面这段话是我个人理解和总结的,没有得到理论认证,我先写出来,如果有高手发现错误,请批评指正。每一个Cookie里面都隐藏了一个SessionIDCookie创建的时候:

Cookie cookie=new Cookie("str","");

Cookie cookie1=new Cookie("str","sss");

可以创建很多str同名的cookie,但是要求cookie中的sessionID必须是不同的,如果是包含同一个SessionIDcookie,那么如果名字相同,那么cookie会进行覆盖。

PS:这个部分可以通过filter过滤器来实现,在这里只为了说明问题。

原文地址:https://www.cnblogs.com/hainange/p/6153639.html