会话ID和浏览器缓存=>浏览器是否足够智能去除SessID?

时间:2009-11-10 14:53:07

标签: caching

我有一个很大的问题:请参阅下面的示例链接。我的应用程序目前将所有“资源/链接”附加到会话ID。我或多或少偶然发现了Firefox缓存:

http://localhost:8080/jquery-ui-1.7.2.custom.css;jsessionid=A8483FBF3BB6DDA499E06210BE0D612C

我的一个大问题是,像上面这个URL这样的URL是否会导致这样的事实:任何缓存标题(我使用几年的Cache-Control)都会变得或多或少无用,因为会话ID会使每个请求都唯一?

(==>我的意思是,新的sessionID在30分钟后被分配。缓存很可能只在这段时间内有效。在此期间之后,将生成一个新的会话ID,间接使所有会话无效客户端上的缓存内容,其URL中的SessionID = url会发生变化,因为它现在有一个新的sessionID。)

=>浏览器是否智能化以发现要缓存的资源是:

http://localhost:8080/jquery-ui-1.7.2.custom.css

而不是:

http://localhost:8080/jquery-ui-1.7.2.custom.css;jsessionid=A8483FBF3BB6DDA499E06210BE0D612C

或者url中的sessionId会导致在浏览器中或多或少地禁用缓存吗?

非常感谢! 扬

2 个答案:

答案 0 :(得分:3)

这不是浏览器是否足够聪明的问题。 W3 standard for HTTP表示应分别缓存不同的网址。所以浏览器在观察完整的URL时是正确的,包括GET参数,例如缓存中的会话ID。

您不应该将会话ID附加到静态的任何(例如样式表)。

答案 1 :(得分:3)

你是对的 - 浏览器不够智能,改变的URL会非常有效地否定缓存。

为什么首先会有会话ID?如果资源不依赖于会话,则从URL中删除会话ID,这将解决您的问题。如果资源是与会话相关的,那么您已经拥有了所需的一切,因为一个会话不应该使用来自另一个会话的资源。