首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么在单击外部源(如Excel、Word等)的链接时无法识别cookies?

为什么在单击外部源(如Excel、Word等)的链接时无法识别cookies?
EN

Stack Overflow用户
提问于 2010-04-16 22:23:05
回答 16查看 40.7K关注 0票数 79

我注意到,当从web浏览器外部单击某个链接时,即使该链接在同一浏览器窗口的新选项卡中打开,我的会话cookie最初也无法识别。

浏览器最终会识别它的cookie,但我不明白为什么来自Excel或Word的初始链接不起作用。为了使其更具挑战性,在Outlook中单击链接可以很好地工作。

有人知道为什么会发生这种情况吗?我在PHP 5.3中使用Zend框架。

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2010-04-29 19:21:38

这是因为MS Office正在使用Hlink.dll组件来查找链接是Office文档还是其他什么。MS Office希望在不借助外部浏览器(使用IE6的Hlink.dll组件)的情况下打开链接在文档中的文档。

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

微软在不支持的组件(Hlink.dll)中有这个错误,而不是认识到他们turn it over to our head的错误(试图说服我们,这是我们使用的单点登录系统的缺陷,即会话cookie),并拒绝升级它。它提供了MS Office的workaround that turns off the lookup functionality

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

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

票数 97
EN

Stack Overflow用户

发布于 2016-05-05 23:34:00

在服务器端,这对我在IIS中有效(使用重写规则)

<rule name="WordBypass" enabled="true" stopProcessing="true">
    <match url=".*" />
    <conditions>
        <add input="{HTTP_USER_AGENT}" pattern="Word|Excel|PowerPoint|ms-office" />
    </conditions>
    <action type="CustomResponse" statusCode="200" statusReason="Refresh" statusDescription="Refresh" />
</rule>
票数 19
EN

Stack Overflow用户

发布于 2015-07-29 16:56:01

PHP解决方案:

这阻止了MS产品识别该重定向。因此,MS从所需的链接启动浏览器。

if (isset($_SERVER['HTTP_USER_AGENT']))
{
    $http_user_agent = $_SERVER['HTTP_USER_AGENT']; 
    if (preg_match('/Word|Excel|PowerPoint|ms-office/i', $http_user_agent)) 
    {
        // Prevent MS office products detecting the upcoming re-direct .. forces them to launch the browser to this link
        die();
    }
}

。。在此代码之后重定向

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2653626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档