"一人分飾多角"是網站開發/測試人員的重要謀生技能,尤其是在Demo或測試時格外重要。在模擬整個作業情境的過程中,測試人員常常一下要當美眉Key單、一下要演主管審單、一下要扮老總核准,忙得不亦樂乎。

由於網站設計上,登入後多會以Session/Cookie記錄不同的使用者身份,而瀏覽器會針對同一網站會持續使用相同的Session進行作業,我們很難用同一個IE在一個網站上同時切替不同角色。在IE6/7時代,我們多半會另外開啟一個IE連線該網站,就能另外享用不同的Session玩一下Cosplay(誤),但IE8起行為做了些改變,我們需要一些額外技巧才能另開新Session。上回我們已經介紹過啟動參數捷徑法,我後來發現選單裡本來就有選項可以選,更為簡便。

不過,這些做法都要另外開IE視窗。我們無法直接IE裡開啟多個頁籤(Tab),讓每個頁籤使用不同Session以不同登入身份進行操作。依我自己的經驗,測試或Demo時要在一堆IE間切來切去實在是件煩人的事,如果能在同一IE,換個Tab就換個身份,操作起來肯定效率加倍。

我寫了一個示範網頁,它可將使用者輸入的名字存進Session模擬登入動作;如發現Session["Name”]已有資料,就視為已登入,不再顯示輸入介面,而直接顯示Hello, username!,Page.Title也會顯示名字以便識別。藉此,我們可模擬以Session保存登入身份的效果。

<%@ Page Language="C#" %>
<script runat="server">
    protected void Page_Load(object sender, EventArgs e)
    {
        switchWebUI();
    }
 
    private void switchWebUI()
    {
        string name = (Session["Name"] ?? "").ToString();
        if (string.IsNullOrEmpty(name))
        {
            dvDisplay.Visible = false;
            dvInput.Visible = true;
        }
        else
        {
            dvInput.Visible = false;
            dvDisplay.Visible = true;
            lblName.Text = Server.HtmlEncode(name);
            Title = "Session(" + name + ")";
        }
    }
 
    protected void btnSet_Click(object sender, EventArgs e)
    {
        Session["Name"] = txtName.Text;
        switchWebUI();
    }
</script>
 
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div id="dvInput" runat="server">
        Name: <asp:TextBox ID="txtName" runat="server"></asp:TextBox>
        <asp:Button ID="btnSet" Text="Set Name!" runat="server" 
            onclick="btnSet_Click" />
    </div>
    <div id="dvDisplay" runat="server">
        Hello, <asp:Label ID="lblName" runat="server"></asp:Label>!
    </div>
    </form>
</body>
</html>

有圖有真相,先看我變出每個Tab一個Session的效果,不錯吧!

咦? 同一個IE視窗不是對同一個網站都共用Session? 在上圖中,顯然每個Tab用了不同的Session。

原理說穿了就不值一毛錢,所以我決定不說以免貶值其實關鍵就在IE對"同一網站"的認定上。這個測試是在本機IIS上跑的,輸入httq://localhost/blah, httq://127.0.0.1/blah都可連上同一網站,但對IE來說,localhost與127.0.0.1被視為不同的網站,所以能各自維持不同的Session,再加上主機對外的IP,這樣我們最少就可用三種不同的URL連上同一個網站,享有三條獨立的Session,重點是,它們可以放在同一個IE的不同頁籤裡,就這麼簡單。

話說回來,牛仔很忙測試員很忙,有時要扮演的角色超過三個怎麼辦?

我想到的方法有兩種,第一種是為機器設定別名,最簡單的做法是在hosts裡設定(如下圖),當然你也可以選擇設在DNS上,這適用於多名測試人員連線到一台測試台主機扮演多重角色的情境。

第二種做法是在IIS上用不同的Port Number再設一個虛擬伺服器,指向相同的Web Application。如此,每增加一個Virtual Web Site,就會多了localhost, 127.0.0.1, 本機IP三個Session可用,但缺點是多個Virtual Web Site有自己的Process,Global, static物件各有自己的一份,有時會違背各角色登入的是同一網站的假設。我覺得第一種方法比較簡單直覺,副作用也少一點。

希望這個小技巧可以讓常要一人分飾多角的朋友日子好過一些。


Comments

# by hydream

太好了,終于找到了一個好的解決方案,晚上修改下是試一試,我在開發中遇到這樣一個問題。就是現在一個WINDOWS FORM里面內嵌IE窗口,然后在這個IE窗口里面打開N多頁籤,每個頁籤想保持獨立SESSION。以前寫了下,SESSION沒辦法獨立,哈哈,現在這個方法不錯。謝謝分享

Post a comment