程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> IsLine FrameWork系列之十二--使用Session、Cookie與安全支持

IsLine FrameWork系列之十二--使用Session、Cookie與安全支持

編輯:關於.NET

今天來介紹IsLine.HttpContent.HttpContentProvider命名空間中關於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()
     {
       //
       // TODO: 在此處添加構造函數邏輯
       //
     }
}

IBaseCapability接口內容:

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

使用該Provider對Cookie的操作,必須制定一個Cookie名稱,不存在默認Cookie,這一點是與Cache不同的。使用Cookie可以通過類似以下代碼實現:

CookieProvider cp = new CookieProvider();
cp.GetContent(“Name”);

CookieProvider支持的方法如下:

方法 說明 string GetContent(string cookieName) 獲得cookie內容 bool UpdateContent(string cookieName, string value) 新建或更新一個cookie,如果cookie不存在,Provider會自動新建 bool UpdateContent(string cookieName, string value, DateType date, int howLong) 同上。DateType指明過期時間的類型,可以是小時、分鐘等;howLong指明了過期的具體數字,與DateType搭配起來可以決定具體過期時間 bool Remove() 移除站點下所有Cookie bool Remove(string cookiePrefixName, int cookiePrefixNameLength) 刪除帶有某前綴的cookie,cookiePrefixName為前綴,cookiePrefixNameLength為前綴長度(個數,從1計數) bool Remove(ArrayList cookieName, RemoveType rct) ArrayList傳入一組Cookie的名稱;
RemoveType有兩個枚舉值:RemoveType.RemoveInput表示刪除傳入的ArrayList數組中的 Cookie,RemoveType.RemoveAllExcludeInput表示保留傳入的ArrayList數組中的Cookie,站點中的其余 Cookie將被刪除。 bool Remove(string cookieName) 移除指定Cookie,傳入Cookie名稱 bool Remove(int cookieNum) 移除指定Cookie,傳入Cookie編號 bool IsExit(string cookieName) 判斷指定Cookie是否存在,傳入Cookie名稱 bool IsExit(int cookieNum) 判斷指定Cookie是否存在,傳入Cookie編號

下面來介紹一下IsLine.HttpContent.HttpContentProvider命名空間中的Session支持。

使用這個組件可以為整站程序提供統一的Session配置屬性,使用方法比較簡單,SessionProvider類同樣實現了ICapability,使用這個Provider的好處是為編程人員提供了與訪問Cache與Cookie同樣的訪問方式。

public class SessionProvider : ICapability
   {
     public SessionProvider()
     {
       //
       // TODO: 在此處添加構造函數邏輯
       //
     }
}

使用方法:

SessionProvider sp = new SessionProvider();
   sp.GetContent(sessionName);

方法列表:

方法 說明 object GetContent(string sessionName) 獲得指定的Session內容 bool UpdateContent(string sessionName, object value) 新建或更新一個Sesison,如果該Session不存在,Provider會新建 bool Remove() 移除站點下所有Session bool Remove(string sessionName) 移除指定Session bool IsExit(string sessionName) 判斷指定Session是否存在

注意SessionProvider和CookieProvider的GetContent()方法,該方法在SessionProvider中返回類型是object,在CookieProvider中返回string。因為Cookie是不可序列化的,Cookie中只能存儲string類型的變量;而Session是可序列化的,Session可以存儲object,所以才有以上的區別。所以使用SessionProvider的 GetContent()取得Session後,還需要使用強制轉換的方法獲得所需的類型。

IsLine.HttpContent.HttpContentProvider 主要完成對Cache、Session、Cookie的支持,為編程人員提供統一的方法名與整站統一的屬性,如果你希望更改這些屬性只需修改配置文件,而不需修改程序。

下面來介紹最後一個命名空間,IsLine.Security.Cryptography命名空間。

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

方法 描述 static string StrengthEncrypting (string str,string key) 在Encrypting方法的基礎上進行二次加密,會使用DES與Rijndael算法,並在此基礎上按規則移動字符串位置,實現加密,該方法為強加密方法。參數Key為種子 static string StrengthDecrypting (string str,string key) 與強加密方法配合使用解密。參數Key為種子,種子需與強加密方法的種子一致。 static string Encrypting (string Source, string Key) 加密一個傳入的字符串,參數Key為種子。 static string Decrypting (string Source, string Key) 配合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的全部命名空間已經介紹完畢,下面一篇IsLine FrameWork系列文章將會公布源代碼以及配置信息大全,敬請期待。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved