为什么当从外部源(即Excel、Word等)单击链接时,cookie无法识别

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (51)

我注意到,当从Web浏览器(例如从Excel或Word)外部单击链接时,我的会话cookie最初是无法识别的,即使链接是在同一浏览器窗口的新选项卡中打开的。

浏览器最终会识别它的cookie,但我很困惑为什么Excel或Word的初始链接不能工作。为了使其更具挑战性,单击某个链接在Outlook中可以正常工作。

有人知道为什么会发生这种事吗?我在PHP5.3中使用ZendFramework。

提问于
用户回答回答于

这是因为如果链接是Office文档或其他东西,MS Office将使用Hlink.dll组件进行查找。MSOffice希望在不借助外部浏览器(使用IE6的Hlink.dll组件)的情况下打开在文档中链接的文档。

如果会话Cookie保护网站,Hlink自然被重定向到登录页面,并且已经到达HTML页面,并且无法“理解”,它将在外部浏览器中打开它。注意,它不是打开原始URL(预期的行为),而是打开重定向的结果,即使是302重定向。

微软在不受支持的组件(Hlink.dll)中有这个错误,而不是识别它们的错误。把它转到我们头上(试图使我们相信这是我们使用的SSO系统的缺陷,即会话cookie),但拒绝升级它。它提供关闭查找功能的解决方法:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\
  Office\9.0\Common\Internet\ForceShellExecute:DWORD=1

或者提供给我们解决服务器端问题的方法,以避免HTTP重定向并更改为Javascript重定向或元刷新重定向(即让Hlink Get text/html页面位于原始URL上,并使其运行外部浏览器来处理它)。

用户回答回答于

我们也遇到了同样的问题,并编写了一个开源的gem来帮助那些使用Rails的用户:https://github.com/spilliton/fix_microsoft_links

但是,可以使用我们在任何框架中使用的方法:

  1. 检测用户代理是否来自microsoft产品。
  2. 使用元刷新标记呈现一个空html页,该标记将导致浏览器使用正确的cookie刷新页面。

扫码关注云+社区