使用IsLine FrameWork開發ASP.NET程式之八—使用Session、Cookie與安全支援

來源:互聯網
上載者:User

    這是本系列文章的最後一篇了,上一期向大家介紹了IsLine.HttpContent.HttpContentProvider命名空間中有關Cache的支援項,這一期將向大家介紹命名空間中關於Session與Cookie的支援。

    這是IsLine FrameWork中一個常用的組件,使用這個組件可以為整站程式提供統一的Cookie配置屬性,例如Cookie加密方式、是否HttpOnly、是否開啟https安全選項、以及預設範圍。CookieProvider是該命名空間下的類,在該類初始化時,會自動載入web.config檔案中的Cookie節點配置,讀取成功後會載入於整個web網站,這些屬性不需要出現在程式中。

    web.comfig節點配置:

    在</configSections>與<appSettings>之間加入以下配置:

<IsLine.HttpContent.Configuration>
<Cookie>
<Cryptography>False</Cryptography>
<IsHttpOnly>True</IsHttpOnly>
<IsSecure>False</IsSecure>
<Domain>Default</Domain>
</Cookie>
</IsLine.HttpContent.Configuration>

在<configSections>與</configSections>之間加入以下節點:

<sectionGroup name="IsLine.HttpContent.Configuration">
        <section name="Cookie" type="IsLine.Data.Configuration.SuitConfig"/>
</sectionGroup>

    然後就可以在程式中使用這個Provider了。在<IsLine.HttpContent.Configuration>節點中,Cryptography表示是否啟用Cookie的加密,它有True和Fasle兩個值,如果值為True,在對Cookie進行建立或更新時,Provider將會自動啟用IsLine.Security.Cryptography命名空間下的Encrypting方法進行加密,在讀取Cookie時,Provider將會自動啟用IsLine.Security.Cryptography命名空間下的Decrypting方法進行解密,關於IsLine.Security.Cryptography資訊後面會有介紹。在加密與解密時,會用到種子字串,種子在web.config中添加節點進行配置:

    <add key=" IsLine.Security.Configuration.TokenKey " value="IsLine"/>

配置好後,Cryptography節點的值就可以使用True了,這時查看硬碟上的Cookie資訊,就是已經加密過的了。

    IsHttpOnly對應Cookie的HttpOnly屬性,該屬性指示是否只能在伺服器端擷取到使用者Cookie,如果該值為True,那麼Javascript、Flash等用戶端方法,將無法擷取到Cookie。這需要IE6的SP1以上版本的瀏覽器支援。

    IsSecure對應Cookie的 Secure屬性,如果該屬性為True,那麼cookie就只能通過https或其他安全性通訊協定才能傳輸,在http中是無效的。置了secure屬性不代表其他人不能看到你機器本地儲存的cookie,只保證cookie與WEB伺服器之間的資料轉送過程加密,而儲存在本地的cookie檔案並不加密。如果想加密本機存放區的Cookie,請設定Cryptography節點為True。

    Domain 對應Cookie的Domain屬性,該屬性指明了Cookie的範圍。比如有一個網站www.abc.com,後來又新增了類似isline.abc.com的網站,為了實現web網站的cookie共用,就需要對cookie的domain重新設定了,這時Domain值可以設定為abc.com,這樣基於abc.com的網站都可以共用Cookie了。

這就是CookieProvider的方便之處,只需要簡單的配置,就可以對整站Cookie進行統一的管理!

     CookieProvider同樣實現了Capability介面,但它與Cache類不同的是,它只實現了IBaseCapability介面:

public class CookieProvider : IBaseCapability
{
public CookieProvider()
{
}
}

   IBaseCapability介面內容:

public interface IBaseCapability
{
bool Remove(string Name);
bool IsExit(string Name);
}

    使用該Provider對Cookie的操作,必須制定一個Cookie名稱,不存在預設Cookie,這一點是與Cache不同的。使用Cookie需要執行個體化CookieProvider類,然後使用執行個體進行操作。

    CookieProvider支援的方法如下,關於方法中的重載一併在以下介紹:

    ● string GetContent :獲得cookie內容

    ● bool UpdateContent:建立或更新一個cookie,如果cookie不存在,Provider會自動建立。如果使用有參的方法,可以定義DateType指明到期時間的類型,可以是小時、分鐘等;howLong指明了到期的具體數字,與DateType搭配起來可以決定具體到期時間

    ● bool Remove :移除網站下所有Cookie或刪除帶有某首碼的cookie,cookiePrefixName為首碼,cookiePrefixNameLength為前置長度(個數,從1計數);或傳入一個ArrayList傳入一組Cookie的名稱;RemoveType有兩個枚舉值:RemoveType.RemoveInput表示刪除傳入的ArrayList數組中的Cookie,RemoveType.RemoveAllExcludeInput表示保留傳入的ArrayList數組中的Cookie,網站中的其餘Cookie將被刪除;同時還可以指定傳入Cookie編號或名稱。

    ● bool IsExit :判斷指定Cookie是否存在,傳入Cookie名稱或編號。

下面來介紹一下該命名空間中的Session支援。使用這個組件可以為整站程式提供統一的Session配置屬性,使用方法比較簡單,SessionProvider類同樣實現了ICapability,使用這個Provider的好處是為編程人員提供了與訪問Cache與Cookie同樣的訪問方式。

public class SessionProvider : ICapability
{
    public SessionProvider()
    {
    }
}

    使用方法與cookie一致,同樣需要執行個體化,不過需要注意的是,SessionProvider和CookieProvider的GetContent()方法,該方法在SessionProvider中傳回型別是object,在CookieProvider中返回string。因為Cookie是不可序列化的,Cookie中只能儲存string類型的變數;而Session是可序列化的,Session可以儲存object,所以才有以上的區別。所以使用SessionProvider的GetContent()取得Session後,還需要使用強制轉換的方法獲得所需的類型。相關方法關興趣的朋友可以訪問作者部落格 。

    關於HttpContentProvider就介紹到這裡,下面來介紹最後一個命名空間,IsLine.Security.Cryptography命名空間。

該命名空間完成了string類型的加密與解密過程,它是由類Cryptography 完成的,該類方法比較多,使用者常用方法可以使用如下幾種:

    ● static string StrengthEncrypting:在Encrypting方法的基礎上進行二次加密,會使用DES與Rijndael演算法,並在此基礎上按規則移動字串位置,實現加密,該方法為強加密方法。參數Key為種子

    ● static string StrengthDecrypting:與強加密方法配合使用解密。參數Key為種子,種子需與強加密方法的種子一致。

    ● static string Encrypting:加密一個傳入的字串,參數Key為種子。

    ● static string Decrypting:配合Encrypting使用,為解密方法,Key為種子,種子需與Encrypting方法的種子一致。

    下面通過例子為大家講解如何使用:

    首先引入命名空間:Using IsLine.Security.Cryptography;

    使用如下代碼:

    string a = Cryptography. StrengthEncrypting(“加密內容”,”isline”) //強加密
    Cryptography.StrengthDecrypting(a,”isline”); //配合強加密的解密
    string b = Cryptography.Encrypting(“加密內容”,”isline”) //普通加密
    Cryptography.Decrypting(b,”isline”); //配合普通加密的解密

    這個命名空間使用比較簡單,就不在繼續闡述了。

    IsLine FrameWork一個是支援公司專屬應用程式系統開發的架構,開發人員可以在其基礎上對企業所需的應用系統進行快速開發,目前版本為V1.0.0.0版,隨著需求的不斷完善,IsLine FrameWork的版本也在不斷升級。

    IsLine FrameWork完成了對資料來源、伺服器端變數、緩衝、日誌、異常、安全效能等元素的封裝,支援多種資料庫、多個資料庫同時操作;支援跨方法的事物;支援多個日誌渲染器同時工作,這意味著開發人員可以同時將分類日誌資訊寫入不同的目標。該架構以設定檔為中心,所有變更動作(例如改變資料庫、改變日誌記錄介質等)都可以通過修改設定檔完成,作者部落格中有關於配置的總結文章,感興趣的朋友可以當做字典來用,歡迎大家閱讀。

    至此,IsLine FrameWork的全部命名空間已經介紹完畢,文中所涉及的dll大家可以從此處下載:        http://files.cnblogs.com/isline/IsLineFrameWorkDLL.rar

    如果大家能夠安下心來,熟練掌握這個架構,相信對大家的工作效率會有所提升,另外如果本文有何錯誤紕漏,歡迎大家訪問作者部落格http://isline.cnblogs.com交流指導,同時感謝《軟體報》為本人提供一個與廣大讀者見面的機會。

    此文已在《軟體報》同步發布,任何個人媒體不得轉載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.