cookie丟失問題(認證失效) Authentication (使用者驗證資訊)也會丟失

來源:互聯網
上載者:User

不知大家是否遇到過如此的尷尬:

當你的頁面認證採用基於Cookie的方式,例如form,windows整合認證時,如下操作後有時認證失效,Authentication (使用者驗證資訊)丟失,需要再次登入
系統正常登入後:

第一個頁面(PageA.htm):window.showModalDialog()後,彈出第二個頁面(PageB.htm)

第二個頁面(PageB.htm):window.open()後,彈出的視窗(PageC.htm)有時會跳轉到登入頁面

這應該是由於不同的頁面存在於不同的進程,導致了身份資訊不同步,發生了認證失效,然而這是有一定機率發生的,經過MS顧問的幫忙,終於找到了方法:
概括講就是,在showModalDialog()時,將window作為對象參數傳入PageB.htm,在PageB中,用這個參數去open(),這樣問題就解決了
具體如下:
-----------PageA.htm--------------
...
var obj = new Object();
obj.myTestWindowA = window;//將這個window存入對象參數中
window.showModalDialog("PageB.htm",obj,"");
...
----------------------------------

-----------PageB.htm--------------
...
var obj = window.dialogArguments;//擷取上個頁面的參數
obj.myTestWindowA.open("PageC.htm");//用上個頁面傳過來的參數開啟下一個頁面
...
----------------------------------
經測試,沒有再出現身份丟失現象,大功告成了!
細心的朋友會發現,這樣的操作會導致,在PageC.htm中由於opener不是PageB.htm而是PageA.htm了,所以無法用window.opener與PageB.htm進行通訊,而open()又無法傳遞對象參數,慌了!
不過幸好在javascript中,對象是一顆大樹,你可以在它的枝杈上掛任何東西,所以,我們為了PageC.htm能與PageB.htm通訊,對PageB.htm改造 如下:
-----------PageB.htm--------------
...
var obj = window.dialogArguments;//擷取上個頁面的參數
var obj.myTestWindowA.myTestWindowB = new Object();
obj.myTestWindowA.myTestWindowB = window;//將PageB的window掛在PageA的window枝幹下
obj.myTestWindowA.open("PageC.htm");//用上個頁面傳過來的參數開啟下一個頁面
...
----------------------------------
如此,便可在PageC中,通過window.opener.myTestWindowB來與PageB頁面的對象通訊,例如 window.opener.myTestWindowB.document.getElementById("TextBox1").value="OK"

註:
1.這也許只是一種情況,可能先open再showModalDialog也有可能導致身份資訊丟失,但大家只要傳那個沒有問題的window到下一頁面,問題就能迎刃而解。

(丟失情況請參見http://www.ourac.net/read.php?tid=45123&fpage=2)
2.也有可能在Session時發生,請參見http://support.microsoft.com/default.aspx?scid=kb;EN-US;196383

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.