尽量完全避免会话数据,必要时,可以考虑把数据放在用户的浏览器中。适用于任何需要会话数据来实现最佳用户体验的情形。采用cookie在用户的浏览器中存放会话数据。把会话数据存放在用户的浏览器中,可以使服务器池中的任何一个Web服务器都能为该用户的请求提供服务,而且你的系统也不必再为它提供存储空间了。用cookie存放会话数据是种常见的方法,而且具有易于扩展的优点,但也有一些缺点。最关键的缺点就是未加密的cookie可以被轻易捕获,用于登录用户的账户。
如果必须为用户保留会话,那么可以在用户的浏览器中这样做。在我们讨论如何做之前,首先来看看这种方法的利弊。把会话数据存放在用户浏览器中的一个好处是,你的系统就不必存储会话数据了。在系统中保存会话数据会有大量的存储和读取开销。不存储会话数据,系统就会减轻很多存储和工作量上的负担。该方法的第一个好处是,该浏览器的请求可以由服务器池中的任何一台服务器处理。,会把公共数据存成的浏览器中,那么服务器池中的任意一台服务器都可以处理该浏览器的请求。
当然,任何事情都有其折中之处。该方法的一个缺点是必须在浏览器和需要该数据的服务器之间往返地传递数据。对每一个请求都要往返地移动数据成本很高,尤其是数据量逐渐变大的情况。注意,不要忽略上面的后半句。虽然现在的会话数据量可能不太大,但几十个程序员访问存储在cookie中的数据,在几十次发布后,你就会想为什么页面载入这么慢呢?另一个非常严重的坏处是由Firefox的插件Firesheep暴露出来的,即在开放的WiFi网络中会话数据很容易被捕捉到,用于恶意登录别人的账户。利用上述插件,来自任何常用的站点(如Google、FacebookTwitter和Amazon等)的会话cookie都可能受危害。我们会给出一种方法来保护用户的cookie不受这种类型的黑客攻击,这种攻击通常叫作会话劫持,不过首先还是来谈谈如何在浏览器cookie中存储会话数据。在浏览器中存储会话数据简单明了。在PHP中,如下面的示例所示,就是用cookie名、值、过期日时间、路径、域和是否加密(是否应该只通要销毁它,只需要用同样的设置把过期时间改为time()-3600即2一过HTTPS设置它)作为参数调用setcookie函数。在用完该cookie后,即把过期时间设置为为1小日时之前。
有些会话存储在多个cookie中,而另一些会话数据则存储在一个cookie中。一个要考虑的因素是cookie的最大大小。根据RFC2965,浏览器应该支持至少4KB的cookie,且应该能支持同一个域中的20个cookie,ni但大多数浏览器把这些作为支持的上限。根据我们前面的观点,cookie越大,页面载人就会越慢,因为对于每个请求都要往返地传递会话数据。
既然我们使用cookie支持会话,那么就要使它们尽可能小,以便系统能够扩展。接下来的问题是如何保护我们的用户,使他们免于遭受挟持?显然,你可以利用HTTPS传递一切页面和cookie。HTTPS采用的安全套接层(SSL)协议,要求对所有的通信和请求进行加密和解密。然而这可能是银行站点的需求,未必适用于新闻或社交网站。我们推荐一种至少利用两个cookie的方法。一个cookie是授权cookie,在每个HTTP页面上使用Javascript调用通过HTPS请求,如下所示。这样就会使大部分数据(内容、CSS、脚本等)都通过未加密的HTP协议传送,而只有授权cookie才通过HTTPS传送。
要获得终极的可扩展性,我们还是推荐避免使用会话。但我们理解情况并非总是如此。对于那些一定要有会话的情况,我们推荐把网站设计会话数据存储在用户的浏览器上。在实现这点时,控制cookie数据的大小至关重要。大量的会话数据会降低页面载入的性能以及系统中的Web服务器的性能。
>>> 查看《尽可能在浏览器端维护会话》更多相关资讯 <<<
本文地址:http://gnbbatt.cn/news/html/3516.html