我注意到,当从web浏览器外部单击某个链接时,即使该链接在同一浏览器窗口的新选项卡中打开,我的会话cookie最初也无法识别。
浏览器最终会识别它的cookie,但我不明白为什么来自Excel或Word的初始链接不起作用。为了使其更具挑战性,在Outlook中单击链接可以很好地工作。
有人知道为什么会发生这种情况吗?我在PHP 5.3中使用Zend框架。
发布于 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页面,并使其运行外部浏览器来处理它)。
发布于 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>
发布于 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();
}
}
。。在此代码之后重定向
https://stackoverflow.com/questions/2653626
复制相似问题