台灣最具影響力的-資訊專家社群 - 讓您成為最有價值的IT專業人才
線上人數
905
 
會員總數:230592
接案會員:6774
文章總數:2320
討論主題:176364
歡迎您免費加入會員
討論區列表 >> ASP >> 請問該如何禁止使用者開啟IE分頁?

[變換順序]
[我要回覆]


回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
請問該如何禁止使用者開啟IE分頁?
價值 : 50 QP  點閱數:2985 回應數:16

點圖分享到Plurk吧!
樓主

joehwang
初學者
2 8
402 10
發送站內信

大家好
目前的工作是維護開發公司內部由ASP開發的內部網站 網站中有數十個子系統,共用一個簽核流程,
所以前人在設計的時候利用一個session變數,來辨別目前使用者是哪個系統

但是IE7問世後
如果使用者用開新分頁的方式,開啟其他子系統,會使另外一個分頁的session變數被覆蓋,導致子系統的ID錯誤
進而讓簽核流程發生錯誤,讓我不勝其擾。

目前只有想到禁止使用者開分頁,但是不知道要如何去實作
希望有這方面經驗的大大可以幫忙我解決這個難題?

感謝各位^^


本篇文章發表於2009-03-04 13:22
什麼是iT Power資訊報 2010年藍色小舖認證專家風雲榜完全名單
1樓
回應

Arrack
捐贈 VP 給 Arrack 檢舉此回應
你的問題不在於禁止開分IE分頁吧,事實上也不能。
就算不能開分頁,也可以開新視窗,Firefox也可以

應該是去思考怎麼改寫這樣的程式吧
EX 改用Request...etc


本篇文章回覆於2009-03-06 11:34
--未登入的會員無法查看對方簽名檔--
2樓
回應

桂正和
捐贈 VP 給 桂正和 檢舉此回應
開分頁的功能不是只有IE7開始
從很早之前的KKMAN、MyIE、Maxthon等等都可以
這樣的系統方式對於不同的Browser支援度很低

對於分頁功能很難完全阻擋
只是防君子不防小人


本篇文章回覆於2009-03-06 14:17
--未登入的會員無法查看對方簽名檔--
3樓
回應

喜新念舊
檢舉此回應
>會使另外一個分頁的session變數被覆蓋,導致子系統的ID錯誤
>進而讓簽核流程發生錯誤
把您的問題敘述更清楚一些
或許解決的邏輯不難


本篇文章回覆於2009-03-06 17:55
--未登入的會員無法查看對方簽名檔--
4樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
內部系統
不允許開分頁
那就等同不允許開另外的IE
這是不可能的

不過提供您另一個思考的方向
既然您是用內部系統
那麼假設IP不共用的狀況下
那麼您就可以程式限定
【同一時間】單一IP只能有一個使用者登入

如果一個IP,登入UserA後
再用UserB登入時
就告訴他,因為已經登入UserA了
所以不可以再用UserB登入




本篇文章回覆於2009-03-09 10:49
--未登入的會員無法查看對方簽名檔--
5樓
回應

JS
捐贈 VP 給 小沈 檢舉此回應
我了解你的意思,主要的是我們寫的Web AP,如果不同AP用相同的session變數,在IE7可以開索引標籤又開另一個AP,這下就會出問題,因不是關IE再開IE。
我也上網尋找解答,但大部份都是說無解。
只能將IE的索引標籤設定關閉。但總不能要求User自已把自已割掉,如果是公司用AD認證,可以在開機時跑bat,將IE索引標籤的機碼關閉,如此User的索引標籤權限就沒了。我們公司之前很多問題都是寫開機開關機碼來解決的。
但這樣要和老大溝通,免得那些老大都習慣用開索引標籤的方式,你把它鎖住,一定就會被叫去訓話的。


本篇文章回覆於2009-03-09 14:07
--未登入的會員無法查看對方簽名檔--
6樓
回應

Fire
檢舉此回應
不能改用 application 變數嗎?


本篇文章回覆於2009-03-09 14:54
--未登入的會員無法查看對方簽名檔--
7樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
#5所描述的狀況蠻奇怪的
小喵特別去測試了一番
小喵在自己的IIS中建立了兩個Web Application(Project)
分別為testA,testB
然後在兩邊寫一個一模一樣的Default.aspx
內容如下:
Default.aspx

Default.aspx.vb


小喵特別測試一下
在testA裡面,使用Session名稱abc儲存123
取回Session名稱abc,得到123

然後小喵透過Ctrl+點超連結,讓新的Tab也開啟一個testA/Default.aspx
取回Session名稱abc,得到123

接著,小喵把testA改為testB
然後
取回Session名稱abc,得到空字串
在testB裡面
使用Session名稱abc儲存xyz
在testB裡面
取回Session名稱abc,得到xyz
在testA裡面
取回Session名稱abc,得到123

因此並沒有互相干擾的困擾

猜測#5發生的現象是
因為在IIS中沒有建立成為獨立的Web Application
由於Session的依存是在一個Web Application
不同的Web App會有各自的Session

但是如果沒有設定成Web App
只是虛擬目錄
那麼他的Session依存就是這個位置網上找,直到找到Web App或者Web站台

也就是...#5的現象應該是發生在沒有設程應用程式
導致Session依存在跟目錄下的站台
因為兩個虛擬目錄是相同的根目錄站台,所以Session互通

^_^




本篇文章回覆於2009-03-09 16:38
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

joehwang
檢舉此回應
看來這個問題真的頗難解,不知道各位都怎麼用web開發簽核系統的呢?

公司的財務、人事、請款都共用一個簽核流程
用session來傳遞系統的代號
然後再依該代號到資料庫裡去找要給哪些人簽核

出錯的環節就是user開分頁會蓋掉原本的session導致系統錯誤
看了討論串發現大家好像都沒這個問題,不知道各位的簽核系統是怎麼設計的
謝謝~~


本篇文章回覆於2009-03-09 21:01
--未登入的會員無法查看對方簽名檔--
9樓
不錯的參考

topcat
捐贈 VP 給 topcat 檢舉此回應
小喵的簽核
事主畫面傳遞一個文件代號給子畫面

子畫面透過該文件畫面較出該文件
從資料庫撈出該文件內容呈現在畫面中
並且撈出該文件分類應該歸屬的簽核程序
然後如果目前使用者為簽核程序中的其中一員,就可以進行簽核
所以檢查的Session只有UserId(並不需要把要帶的資料都用Session傳遞)

至於您所說的開Tab會造成問題....小喵還沒發生過耶
(除非不同的分頁使用不同的使用者登入相同的系統)

每個人設計的程式運作流程、簽核流程都可能不同
從您的描述裡面,並不清楚您所謂的Session被分頁覆蓋導致錯誤是發生在什麼狀況

是否您可以舉個簡單的例子(程式),依照您舉的例子來討論
否則你說的簽呈系統,與我說的簽呈系統不見得相同

另外
#5所說的狀況,小喵#7實驗證實不會發生
^_^


本篇文章回覆於2009-03-09 21:35
--未登入的會員無法查看對方簽名檔--
10樓
不錯的參考

喜新念舊
檢舉此回應
對阿, 開新的 tab 怎麼會改變 session? 重開一個 IE session 才會改變吧?!
您說"用session來傳遞系統的代號", 如果這個代號不能因為不同session而改變, 應該要用 appliaction() 來存吧?


本篇文章回覆於2009-03-09 21:44
--未登入的會員無法查看對方簽名檔--
11樓
作者回應

joehwang
檢舉此回應
首先感謝各位前輩的幫忙^________^

請容我以實際畫面說明這個session的問題

1)首先登入公司的內部網站,並選擇IT系統登入
http://picasaweb.google.com/lh/photo/5Z7ZvAlF_bY4rE0x7RaNcw?feat=directlink

2)登入IT系統,此時系統代碼是IT
http://picasaweb.google.com/lh/photo/QZf62tpHHPMoU--z5gNadw?feat=directlink

3)此時開啟索引標籤(tab功能)回首頁
http://picasaweb.google.com/lh/photo/ih1yUrWM4vpkNHWy6ydyyw?feat=directlink

4)回首頁後,選擇請款系統進入
http://picasaweb.google.com/lh/photo/qtEcoZXB2m5FzOe37SJ1Ew?feat=directlink
此時session("sys_no")已由"IT"被覆蓋為"FIN"

5)這時,再切回IT系統的分頁繼續使用
http://picasaweb.google.com/lh/photo/wPY5BFJdOGhWdv9OXTG6fQ?feat=directlink

因為session("sys_no")在step 4變成"FIN",使用者又用分頁切回IT系統繼續進行操作
所以送出簽核時造成IT系統的流程跑成財務系統的流程
(因為簽核程式是所有子系統共用的所以用session("sys_no")來判斷,目前是在哪個系統要用何種流程進行簽核,而此時的session("sys_no")="FIN",所以系統抓取了FIN的流程)
因此產生了錯誤。

再次感謝各位的幫忙~


本篇文章回覆於2009-03-09 23:18
--未登入的會員無法查看對方簽名檔--
12樓
回應

喜新念舊
檢舉此回應
這應該要從流程設計的邏輯去改(例如不同系統用不同session變數存), 而不是去限制不給開新tab


本篇文章回覆於2009-03-09 23:52
--未登入的會員無法查看對方簽名檔--
13樓
回應

Fire
檢舉此回應
如果這樣改會不會很累?
在 IT 系統每一個頁開頭都判斷 session("sys_no") 是否為 "IT"
在請款系統每一頁面都判斷 session("sys_no") 是否為 "FIN"


本篇文章回覆於2009-03-09 23:57
--未登入的會員無法查看對方簽名檔--
14樓
最有價值解答

topcat
捐贈 VP 給 topcat 檢舉此回應
小喵說小喵的方式
您參考看看

看起來,您是在一個ASP.NET專案裡面運作好幾個系統
這幾個系統都跑在相同的一個專案中
所以Session毫無疑問的,彼此是共用的

而您是用Session來判斷這個使用者進入了哪個系統
問題就會遇到您目前的狀況

這個無論你用Session來存、甚至用資料庫來存使用者的開啟狀況
都會有覆蓋的現象

所以小喵設計時不會這樣設計
小喵會定一個資料表
這個資料表內容是
系統代號(Sys_No),ASPX名稱(aspx)
這兩個合起來是Key
然後把所有用到的aspx全部記錄到這個資料表

執行時,只要在BasePage中
讀取該Page的名稱(asp.net讀到的會是類似dir1_abc_aspx,當然有辦法轉換取出abc.aspx)
然後去該資料表檢查一下
就可以得到Sys_No

那麼就不會有您這樣的問題了

其實這個問題是發生在系統架構上,沒有考慮到Session互蓋的狀況
根本的解決應該從架構上去修改
您要禁止使用Tab這是治標不治本
就算不用Tab
使用新視窗一樣會有問題

以上是小喵的方式提供您參考
因為動到了整體架構的東西,要改的會比較多
您自己斟酌看看囉

^_^



本篇文章回覆於2009-03-10 08:38
--未登入的會員無法查看對方簽名檔--
15樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
補充一下

以小喵的方式
如果您本來就有用PageBase
那麼您只需要增加一個Table
把所有aspx維護到該Table
再修改PageBase的Page_Load

如果沒有用PageBase
那麼您還需要把所有的aspx都改繼承BasePage

PageBase是什麼...看一下以下這篇
http://www.dotblogs.com.tw/topcat/archive/2008/03/05/1250.aspx

^_^


本篇文章回覆於2009-03-10 08:43
--未登入的會員無法查看對方簽名檔--
[變換順序]
 

回覆
如要回應,請先登入.