cookie与session的关联

来源:互联网 发布:排队返现源码下载 编辑:程序博客网 时间:2024/06/05 17:53

前提:cookie没有被禁用。

      当用浏览器登录到某网站服务器时,先找对应的cookie文件,当首次访问是当然没有cookie文件,所以在请求头部中没有cookie的内容,即在请求头部中没有类似Cookie: JSESSIONID=XXXXXXXXXXXXXXX的内容,这时当请求到达服务器后,服务器看请求头中没有JSESSIONID值,于是生成一个session对象,并由某种算法产生一个值赋给这个session的id,并将sessionid,和session对象放入HashMap中,然后将这个sessionid发回以客户端,即在响应的头部有一行:Set-Cookie:JSESSIONID=XXXXXXXXXXXXXX,浏览器解析后会将在JSESSIONID和值记录到cookie中。
        如果用户登录,我们会在程序中将一些值放入session中,如request.getSession().setAttribute("username","xxxx"),下次就可根据这个值是否为空来断断用户是否已登录。

       当用浏览器再次请求此网站的另一页面时,浏览器检查看有没有cookie,这时有cookie(前提是cookie没有过期),会自动的把cookie的内容附加到请求头中,即在请求头附加了一行:Cookie: JSESSIONID=XXXXXXXXXXXXXXXXXXXXXXX,服务器接收到请求后会根据JSESSIONID的值知道sessionid的值,在tomcat中两个值是一样的,然后你可根据这个sessionid找到对应的session,可由session中登录后设定的某些值是否为空,来判断此用户是否登录。

      当用户安全登出后(调用session.invalidate()),服务器会将session销毁,并生成一个新的JSESSIONID发回用客户端,浏览器接收响应后,会将cookie中的JSESSIONID换成新值,当用户再次访问此服务器时,会在请求中自动的加入新的JSESSIONID的值发到服务器,这时服务器根据JSESSIONID找不对应的session了,因此就可知道是一次新的会话,服务器会生成一个session对象,并将客户端发过来的JSESSION的值赋给这个session的id。
     这时如果想再访问安全登出之前的页面,因为没有登录,所有session.getAttribute("username")的值为空,
因此可判断用户没有登录。

原创粉丝点击