Session id实现经过Cookie来传输方法及代码参考

一、 Web中的Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所通过的这段时间,也就是用户浏览这个网站所花费的时间。所以从上述的定义中咱们能够看到,Session其实是一个特定的时间概念。php

须要注意的是,一个Session的概念须要包括特定的客户端,特定的服务器端以及不中断的操做时间。A用户和C服务器创建链接时所处的Session同B用户和C服务器创建链接时所处的Session是两个不一样的Session。html

session的工做原理java

(1)当一个session第一次被启用时,一个惟一的标识被存储于本地的cookie中。浏览器

(2)首先使用session_start()函数,PHP从session仓库中加载已经存储的session变量。服务器

(3)当执行PHP脚本时,经过使用session_register()函数注册session变量。cookie

(4)当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地必定路径下的session库中,这个路径能够经过php.ini文件中的session.save_path指定,下次浏览网页时能够加载使用。session

二、HttpSession session = request.getSession();函数

根据状况当这句代码须要建立session的时候,服务器每建立一个session都会有一个想对应的session_id,而且服务器会把这个session_id号,会以Cookie的形式回写给客户端(浏览器),下次同一个用户访问的时候会带这个session_id号过来的。优化

这样有时候就会出现一个问题,当你把客户端(浏览器)关闭的时候,若是不当心关闭了浏览器,那么Cookie就不存在了。网站

例如常见的购物车功能,在购物的时候,不当心关闭了浏览器,该用户下次再来访问的时候,上次的记录就不存在了,

因此当session建立的时候,能够把对应建立的session_id存到一个设置有效期的的Cookie当中,那么在你关闭浏览器的时候,在较短期内,再次打开浏览器,上次的浏览记录依然仍是在的:

经过如下代码能够去实现:  

1
2
3
4
5
6
7
HttpSession session = request.getSession();
   session.setAttribute( "String1" "Object1" );
   String session_id = session.getId();
   Cookie cookie =  new  Cookie( "JSESSIONID" , session_id); //session_id默认是存放在一个name为JSESSIOINID里面的
   cookie.setPath( "上次路径" );
   cookie.setMaxAge( 30  60 ); // 30 分钟
   response.addCookie(cookie);
   www.169it.com

三、这里又有了另一个问题,为何我上面这段代码设置了Cookie的生命周期,再次打开浏览器的时候,这个Cookie还在呢;而当你建立session而且默认以Cookie的形式回写给客户端的时候,不当心关闭了浏览器,再次打开的时候Cookie却不存在了?

关于Cookie的一个生命周期的问题:

  Cookie若是不设置过时时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie通常不保存在硬盘上而是保存在内存里。

若是设置了过时时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过时时间。存储在硬盘上的cookie能够在不一样的浏览器进程间共享,好比两个IE窗口。而对于保存在内存的cookie,不一样的浏览器还有不一样的处理方式。

四、有些网站使用Session ID(会话ID)跟踪用户访问,每一个用户访问网站时都会生成独特惟一的Session ID,加在URL中。搜索引擎蜘蛛的每一次访问也会被当成一个新的用户,URL中会加上一个不一样的Session ID,这样搜索引擎蜘蛛每次来访问时所获得的同一个页面的URL将不同,后面带着一个不同的Session ID。这也是最多见的蜘蛛陷阱之一。 搜索引擎遇到这种经常的Session ID,会尝试判断字符串是Session ID仍是正常参数,成功判断出Session ID就能够去掉Session ID,收录正常URL。但也常常判断不出来,要么不肯意收录,要么收录多个带有不一样Session ID的URL,内容却彻底同样,造成大量复制内容,这两种状况对网站优化都不利。

 


本文来源:Session id实现经过Cookie来传输方法及代码参考

相关文章
相关标签/搜索