lynn汤圆  

首先,我们需要弄清楚cookie和session的实现与区别。

 

cookie:是当我们 使用浏览器访问一些网站之后,存放在客户端的一组用于跟踪用户及用户自定义的数据。

Cookie的Expires属性标识了Cookie的有 效时间,如果不设置过期时间,则表示这个Cookie生命周期为浏览器会话期间。

会话Cookie一般不保存在硬盘上而是保存在内存里。如果设置了过期时间,浏览器就会把Cookie保存到硬盘 上。

 

session:

Session是存放在服务器端的类似于HashTable结构(每一种Web开发技术的实现可能不一样,下文直接称之为HashTable)来存放用户 数据。

坏处是随着时间的增加,这个数据库会急速膨胀,特别是访问量增加的时候。一般还是采取前一种方式,以减轻服务器压力。

 

所以,我们希望能够在客户端实现session(即sessionID的保存方法):

1、使用cookie来保存。

服务器通过设置Cookie的方式将Session ID发送到浏览器,且这个cookie不设置过期时间。那么当我们登录一个网站过后,在会话期间,打开新窗口是会保存登录状态的,因为这些信息(sessionID)被储存在了cookie中。当浏览器关闭的时候,Cookie就消失了,这个Session ID就丢失了。

如果我们设置这个时间为若干天之后,那么这个Cookie会保存在客户端硬盘中,即使浏览器关闭,这个值仍然存在,下次访问相应网站时,同 样将这个Session ID值发送到服务器上,服务器根据这个Session ID从内存或者数据库里面恢复存放Key-Value对的Hashtable。但是这样做的问题是,如果服务器上的session数据被销毁了,那么就无法返回有效值了。

解决方法是:将用户的用户名和加密之后的密码也通过Cookie的方式存放在客户端。那么服务器端数据被销毁后,我们重新访问该网站,则重新登录一次从而重建session,并更新客户端上Cookie中存放的的Session ID。

 

2、使用URL附加信息的方式。(与1中不设置过期时间一样)

3、在页面表单里面增加隐藏域。(2是GET,3是POST)

posted on 2017-08-10 11:15  lynn汤圆  阅读(846)  评论(0)    收藏  举报