MS Office是使用一個叫做Hlink.dll的元件來判斷文件中的連結是要開啟一個MS Office檔案, 或是其他東西(browser)。
假設Excel中的目標網頁是http://localhost/manager/EditNews.aspx,這個網頁是需要登入才可以進入的。在沒有登入的情況下會redirect到登入頁http://localhost/login.aspx?ReturnUrl=news.aspx。而我實際上已經有登入過了(session已存在)
所以我從Excel開啟了http://localhost/manager/news.aspx,應該會正常連結到目標網頁才對,但是我總是會連結到http://localhost/login.aspx?ReturnUrl=news.aspx。這是不是就像是session已經消失了......其實session沒有消失
想像Excel(Hlink.dll)是這樣運作的......
當一個連結需要用browser開啟時,在Excel內部會先執行http://localhost/manager/news.aspx,因為在內部執行,所以沒有session,因此就會導向登入頁(http://localhost/login.aspx?ReturnUrl=news.aspx)了。
在參考資料中,有人是使用header refresh的方式來解決這個問題,但是我不適用,有需要的人也可以參考看看。
而我是使用javascript setTimeout的方式。因為我在登入頁有加上ReturnUrl的參數,所以我可以用來當作判斷返回的依據
.cs
if (Request.QueryString["ReturnUrl"].Contains("news") && Session["login"] != null)
{
news.Value = "true";
ReturnUrl.Value = Request.QueryString["ReturnUrl"];
}
.aspx
<asp:HiddenField ID="news" runat="server" />
<asp:HiddenField ID="ReturnUrl" runat="server" />
$(function () {
if ($('#news').val() === "true") {
setTimeout(function () {
location.href = "manager/" + $('#ReturnUrl').val();
}, 100);
}
});
如果參數設定的適當,在登入頁暫停一下再連結到目標網頁,應該就可以解決問題了
參考資料:http://stackoverflow.com/questions/2653626/why-are-cookies-unrecognized-when-a-link-is-clicked-from-an-external-source-i-e
參考資料:http://stackoverflow.com/questions/2653626/why-are-cookies-unrecognized-when-a-link-is-clicked-from-an-external-source-i-e
沒有留言:
張貼留言