cookie与session

  cookie与session都是保存会话数据的技术

  cookie存放在用户端的磁盘中,浏览器一般只允许存放300个cookie,且每一个站点最多存放20个cookie,每个cookie的大小限制为4kb;当用户需要记住自己的用户名与密码的时候(实际应用中,安全考虑尽量不要将密码保存在cookie中),事件发生在用户本地浏览器,所以使用cookie技术。cookie虽然发生在浏览器本地,但是常常是由web服务器对其操作,并非用本地的js(可以直接在浏览器上设置一个cookie)或者其他静态代码实现,浏览器向服务器发送login请求后,服务器根据用户的选择是否保存用户名或密码的用户浏览器,它首先创建相应cookie对象,写入相关数据,然后设置cookie的生命周期(如果一个cookie没有设置生命周期,当浏览器关闭之后cookie将销毁),并把这个cookie添加的response请求写回用户浏览器。

  session在服务器的内存中保存,所以当session数据存放过多时服务器的性能明显下降,当用户需要在一段时间里持续保存某些数据时且这些数据来源于服务器,使用session技术可以解决,如用户的购物车或网站每一个网页显示用户的一些个人数据等,这样可以避免频繁的数据库操作,session与cookie一样有生命周期,且默认的生命周期取决与web服务器的配置文件,但不同于cookie生命周期的是,session生命周期是指无操作时间,在给定的时间里用户没有再次访问该session即失效,如果中间有访问,生命周期将重置,生命周期结束后销毁session。

  每一个用户之所以能够找到自己在服务器对应的session信息是因为每一个session在创建的时候便有了唯一的sessionid,并写回了浏览器的cookie当中,当浏览器访问该站点时就带上本地cookie信息中的sessionid而访问服务器中对应的session,所以当浏览器禁用cookie时,不仅cookie信息不能使用,连服务器端的session也不能使用。知道session之所以能访问是因为浏览器发送了sessionid之后,当用户禁用cookie时要做到仍能访问session就需要手动在浏览器发送的请求中带上相对应sessionid,而httpresponse提供了url地址重写的方法智能的判断浏览器是否禁用cookie,如果禁用则在url地址后面添加sessionid参数,否则不做操作。

原文地址:https://www.cnblogs.com/mapingchuan/p/7643973.html