使用IsLine FrameWork开发ASP.NET程序之八—使用Session、Cookie与安全支持

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介:

  这是本系列文章的最后一篇了,上一期向大家介绍了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完成了对数据源、服务器端变量、缓存、日志、异常、安全性能等元素的封装,支持多种数据库、多个数据库同时操作;支持跨方法的事物;支持多个日志渲染器同时工作,这意味着开发人员可以同时将分类日志信息写入不同的目标。该框架以配置文件为中心,所有变更动作(例如改变数据库、改变日志记录介质等)都可以通过修改配置文件完成,作者博客中有关于配置的总结文章,感兴趣的朋友可以当做字典来用,欢迎大家阅读。


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

相关文章
|
6天前
|
设计模式 开发框架 JavaScript
基于.NET8 + Vue/UniApp前后端分离的快速开发框架,开箱即用!
基于.NET8 + Vue/UniApp前后端分离的快速开发框架,开箱即用!
|
1月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
101 3
|
5天前
|
存储 缓存 NoSQL
2款使用.NET开发的数据库系统
2款使用.NET开发的数据库系统
|
13天前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
37 4
|
16天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
5天前
|
开发框架 JavaScript 前端开发
2024年全面且功能强大的.NET快速开发框架推荐,效率提升利器!
2024年全面且功能强大的.NET快速开发框架推荐,效率提升利器!
|
28天前
|
存储 安全 数据安全/隐私保护
Cookie 和 Session 的区别及使用 Session 进行身份验证的方法
【10月更文挑战第12天】总之,Cookie 和 Session 各有特点,在不同的场景中发挥着不同的作用。使用 Session 进行身份验证是常见的做法,通过合理的设计和管理,可以确保用户身份的安全和可靠验证。
19 1
|
29天前
|
JSON C# 开发者
C#语言新特性深度剖析:提升你的.NET开发效率
【10月更文挑战第15天】C#语言凭借其强大的功能和易用性深受开发者喜爱。随着.NET平台的演进,C#不断引入新特性,如C# 7.0的模式匹配和C# 8.0的异步流,显著提升了开发效率和代码可维护性。本文将深入探讨这些新特性,助力开发者在.NET开发中更高效地利用它们。
33 1
|
1月前
|
C# Windows
一款基于.NET开发的简易高效的文件转换器
一款基于.NET开发的简易高效的文件转换器
|
1月前
|
缓存 Java Spring
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
文章比较了在Servlet和Spring Boot中获取Cookie、Session和Header的方法,并提供了相应的代码实例,展示了两种方式在实际应用中的异同。
150 3
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header