MS office 하이퍼링크 세션 버그 문제
=> ms 오피스 제품에서 하이퍼링크 사용 시 세션이 공유 되지 못하는 문제가 있다.
특정 url 호출 시 로그인이 안되어 있을경우 redirect 되도록 설정 시 세션 정보가 오피스 제품에서 클릭 시와 일반 브라우저에서 클릭 시 결과가 틀리다.
=> 오피스 제품군에서는 링크 클릭 시 오피스 제품에서 결과를 받아다가 브라우저에 넘긴다.
=> redirect의 경우 완료된 url를 브라우저에 재호출한다. 이때 세션이 공유되지 못하고 신규 세션으로 브라우저가 열린다.
=> 세션을 이용한 기능이 동작되지 못함...
-> ms 오피스에서 클릭 시와 브라우저에서 클릭시를 구분을 두어 처리.
오피스 제품에서 클릭 시 redirect 하지 않고 바로 완료 처리하여 현재 url를 넘길 수 있도록 설정함.
request user-agent에 구분값이 있을줄 알았으나, 브라우저와 동일한 값.
accept 라는 값에 text/html 문자로 구분하여 처리함.
http://stackoverflow.com/questions/2653626/why-are-cookies-unrecognized-when-a-link-is-clicked-from-an-external-source-i-e
I noticed that when a link is clicked externally from the web browser, such as from Excel or Word, that my session cookie is initially unrecognized, even if the link opens up in a new tab of the same browser window.
The browser ends up recognizing its cookie eventually, but I am puzzled as to why that initial link from Excel or Word doesn't work. To make it even more challenging, clicking a link works fine from Outlook.
Does anybody know why this might be happening? I'm using the Zend Framework with PHP 5.3.
This is because MS Office is using Hlink.dll component to lookup if the link is Office document or something else. MS Office expect to open the document linked within documents without the aid of external browser (using Hlink.dll component of IE6).
If session cookie protects website Hlink naturally is being redirected to login page and having reached HTML page and not able to "understand" it opens it in external browser. Note that it opens not original URL (expected behavior) but the result of redirect, even if it was 302 redirect.
Microsoft has that bug in unsupported component (Hlink.dll), instead of recognizing the bug they turn it over to our head (trying to convince us that it is flaw of SSO system we use, i.e. session cookies) and refuses to upgrade it. It offers workaround that turns off the lookup functionality of MS Office:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\
Office\9.0\Common\Internet\ForceShellExecute:DWORD=1
Or offer us to workaround serverside, to avoid HTTP redirects and change into Javascript redirects or META REFRESH redirects (i.e. to have Hlink get text/html page on original URL and make it run external browser to handle it).
Fix for VB.NET:
Dim userAgent As String = System.Web.HttpContext.Current.Request.UserAgent
If userAgent.Contains("Word") Or userAgent.Contains("Excel") Or userAgent.Contains("PowerPoint") Or userAgent.Contains("ms-office") Then
System.Web.HttpContext.Current.Response.Clear()
System.Web.HttpContext.Current.Response.Write("<html><head><meta http-equiv='refresh' content='0'/></head><body></body></html>")
System.Web.HttpContext.Current.Response.End()
End If
It basically forces the browser to refresh the page, so the request comes in with the user agent of the browser and all the correct cookies.
'Java' 카테고리의 다른 글
c:import include request uri 정보얻기 (0) | 2016.01.20 |
---|---|
StringBuilder replaceAll (0) | 2016.01.08 |
Gson DateFormat (0) | 2015.12.22 |
map to list (0) | 2015.11.18 |
map key 값 가져오기 (0) | 2015.11.04 |