首先說明原理:
系統(tǒng)是認一個一個程序范圍的,一般來說,一個IE默認為一個程序范圍.
框架因為有了跨域的內(nèi)容,所以它首先默認的是框架程序本身的程序范圍,這樣使得框架內(nèi)的程序范圍得不到確認.
為了讓這個IE默認為框架內(nèi)的程序范圍,所以我使用了多次跳轉(zhuǎn).
首先,跳出本框架,進入一個無框架的需要session值的網(wǎng)站頁面(就叫它B服務器的頁面),并在這個頁面中生成一個session以便系統(tǒng)自動生成一個sessionID,然后又跳回到有框架的頁面.因為系統(tǒng)已經(jīng)為這個IE生成了一個sessionID,所以只要不關掉這個IE,系統(tǒng)一直以為這個IE是本程序范圍的.這樣,再次生成的session值就得以在這個ID中生存下來.
也就達到了騙過系統(tǒng)的目的.
再補充一點,二次跳轉(zhuǎn)使用了不同的方式,原因是我需要把框架外的信息丟棄,而要保存框架內(nèi)的信息.
而不同的跳轉(zhuǎn)方式會丟棄或保存跳轉(zhuǎn)前的信息的。
程序?qū)崿F(xiàn)方式:
文件1:
框架文件:index.htm(運行在服務器A上)
奇豪門業(yè)
文件2:index.asp (運行在服務器B上,作用跳轉(zhuǎn)和生成sessionID)
<%
if session("xm2")="" then
session( "xm2")="eee"
'上面這一句的目的只是為了使用session,讓系統(tǒng)為這個IE生成一個sessionID,并且判斷一下是不是已經(jīng)跳轉(zhuǎn)過,免得引起死循環(huán)。
%>
<%
,上面這一句是回到框架,注意:只能用上面這個跳轉(zhuǎn)的方法,別用下面的跳轉(zhuǎn)方法。
else
Response.Redirect "index2.asp"
'上面一句才是真正地跳轉(zhuǎn)運行服務器B上的程序!注意:也只能用這方法跳!
end if%>
經(jīng)過以上的跳轉(zhuǎn),本IE已經(jīng)有了服務器B上的sessionID,也就是說,框架雖然是在服務器A上的主框架運行,但它可以確保服務器B上的session不丟失,達到跨域運行的目的。
系統(tǒng)是認一個一個程序范圍的,一般來說,一個IE默認為一個程序范圍.
框架因為有了跨域的內(nèi)容,所以它首先默認的是框架程序本身的程序范圍,這樣使得框架內(nèi)的程序范圍得不到確認.
為了讓這個IE默認為框架內(nèi)的程序范圍,所以我使用了多次跳轉(zhuǎn).
首先,跳出本框架,進入一個無框架的需要session值的網(wǎng)站頁面(就叫它B服務器的頁面),并在這個頁面中生成一個session以便系統(tǒng)自動生成一個sessionID,然后又跳回到有框架的頁面.因為系統(tǒng)已經(jīng)為這個IE生成了一個sessionID,所以只要不關掉這個IE,系統(tǒng)一直以為這個IE是本程序范圍的.這樣,再次生成的session值就得以在這個ID中生存下來.
也就達到了騙過系統(tǒng)的目的.
再補充一點,二次跳轉(zhuǎn)使用了不同的方式,原因是我需要把框架外的信息丟棄,而要保存框架內(nèi)的信息.
而不同的跳轉(zhuǎn)方式會丟棄或保存跳轉(zhuǎn)前的信息的。
程序?qū)崿F(xiàn)方式:
文件1:
框架文件:index.htm(運行在服務器A上)
文件2:index.asp (運行在服務器B上,作用跳轉(zhuǎn)和生成sessionID)
<%
if session("xm2")="" then
session( "xm2")="eee"
'上面這一句的目的只是為了使用session,讓系統(tǒng)為這個IE生成一個sessionID,并且判斷一下是不是已經(jīng)跳轉(zhuǎn)過,免得引起死循環(huán)。
%>
<%
,上面這一句是回到框架,注意:只能用上面這個跳轉(zhuǎn)的方法,別用下面的跳轉(zhuǎn)方法。
else
Response.Redirect "index2.asp"
'上面一句才是真正地跳轉(zhuǎn)運行服務器B上的程序!注意:也只能用這方法跳!
end if%>
經(jīng)過以上的跳轉(zhuǎn),本IE已經(jīng)有了服務器B上的sessionID,也就是說,框架雖然是在服務器A上的主框架運行,但它可以確保服務器B上的session不丟失,達到跨域運行的目的。