ASP.NET企业开发框架IsLine FrameWork系列之十二--使用Session、Cookie与安全支持

简介:

 今天来介绍IsLine.HttpContent.HttpContentProvider命名空间中关于Session与Cookie的支持。

    这是IsLine FrameWork中一个常用的组件,使用这个组件可以为整站程序提供统一的Cookie配置属性,例如Cookie加密方式、是否HttpOnly、是否打开https安全选项、以及默认作用域。CookieProvider是该命名空间下的类,在该类初始化时,会自动加载web.config文件中的Cookie节点配置,读取成功后会加载于整个web站点,这些属性不需要出现在程序中。

    web.comfig节点配置:

    在</configSections>与<appSettings>之间加入以下配置:

 

复制代码
ExpandedBlockStart.gif 代码
 
  
< 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;

    代码:

复制代码
ExpandedBlockStart.gif 代码
 
  
string a = Cryptography. StrengthEncrypting(“加密内容”,”isline”) // 强加密

Cryptography.StrengthDecrypting(a,”isline”);
// 配合强加密的解密

string b = Cryptography.Encrypting(“加密内容”,”isline”) // 普通加密

Cryptography.Decrypting(b,”isline”);
// 配合普通加密的解密
复制代码

 

本文转自Aicken(李鸣)博客园博客,原文链接:http://www.cnblogs.com/isline/archive/2010/02/02/1659185.html,如需转载请自行联系原作者

相关文章
|
2月前
|
存储 开发框架 NoSQL
ASP.NET WEB——项目中Cookie与Session的用法
ASP.NET WEB——项目中Cookie与Session的用法
29 0
|
8月前
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
114 0
|
9月前
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
113 0
|
9月前
|
SQL 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
142 0
|
4月前
|
存储 SQL 开发框架
国产化之路 Linux Mono下的asp.net 开发笔记(三)
国产化之路 Linux Mono下的asp.net 开发笔记(三)
|
4月前
|
存储 SQL 开发框架
国产化之路 Linux Mono下的asp.net 开发笔记(二)
国产化之路 Linux Mono下的asp.net 开发笔记(二)
|
4月前
|
存储 开发框架 .NET
国产化之路 Linux Mono下的asp.net 开发笔记(一)
国产化之路 Linux Mono下的asp.net 开发笔记(一)
|
5月前
|
开发框架 自然语言处理 前端开发
基于ASP.NET MVC开发的、开源的个人博客系统
基于ASP.NET MVC开发的、开源的个人博客系统
51 0
|
6月前
|
开发框架 .NET 数据库
asp.net企业费用报销管理信息系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio
asp.net 企业费用报销管理信息系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使 用c#语言开发 应用技术:asp.net c#+sqlserver 开发工具:vs2010 +sqlserver
49 0
|
8月前
|
SQL 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(完:内附源码)
经过一段时间的准备,【ASP.NET Core MVC开发实战之商城系统】已经完成,目前代码已开发完成,先将全部内容整理分享,如有不足之处,还请指正。
106 0