RSS 2.0 Feed
Web技术
html/css/js/dhtml/htc/xml/xslt/...
摘要:今日偶然阅读了Understanding Single Sign-On in ASP.NET 2.0 这篇关于单点登录的文章,仔细阅读,发现还是有些不尽完整之处。 文中对于单点登录的介绍,忽略了一个重要问题——就是站点的域的问题。在深入讨论这个问题之前,先简单介绍一下网站域的概念,举个例子,假如我们有三个站点:A: blog.joycode.com; B: beta.joycode.com; C: www.openlab.net.cn 。那么A站点的域是"blog.joycode.com",它的主域是"joycode.com";B站点的域是"beta.joycode.com",它的主域是"joycode.com";C站点的域是"www.openlab.net.cn" ,它的主域是"openlab.net.cn"。对于A和B来说,他们是不同的网站域,但是主域是相同的,都是"joycode.com",对于A和C来说,不管是域还是主域,都不相同。一般我们所说的单点登录,都是指A,B,C这三类站点可以在一点登录,实现所有的站点都不需要再次登录,甚至于不仅限于网站之间,也可能是从其他客户端到网站。一般比较大的系统都需要这样的单点登录系统,例如著名的微软的Passport,还有飞信的SSO。 回过头来看这篇单点登录文章,按照这种方案,仅能实现同一域下各虚拟目录的单点登录,离真正的单点登录还差得远,当然,文章的思路,对于同一域下的虚拟目录,或者同一主域的不同站点,还有有意义的。 前面说到了文章中的方案还只能实现同一域下的不同虚拟目录的单点登录,还不能实现同一主域的单点登录,那么怎么样才能在这个方案基础上实现同一主域的不同站点的单点登录呢? 文章的核心部分在于让每个站点的MachineKey保持一致,采用Form验证,这样可以保证每台服务器Cookie加密解密的结果是一致的。Form验证将登录后的授权凭证加密后保存在Cookie中,由于同一域下面的虚拟目录,Cookie是可以共享的,因此可以同一域内直接实现单点登录,而对于不同域,Cookie是不能直接共享的,所以对于不同域而同一主域的情况,我们还需要将Cookie的domain设为主域。那么还以前文的A、B站点为例,要实现单点,我们只要在web.config中,配置authentication \forms节点下domain值为主域,如下:<authentication mode="Forms"> <forms loginUrl="login.aspx" name=".ASPXAUTH" domain="joycode.com"/> </authentication>即可实现同一主域不同子域站点之间共享登录了。 而对于不同主域的站点,实现方案相对就复杂多了。...[阅读全文]

posted @ | Feedback (18) | Filed Under [ Web技术 ]

摘要: 如果你的Asp.Net程序执行时碰到这种错误:“验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。”那么说明你没有让你的应用程序使用统一的machineKey,那么machineKey的作用是什么呢?按照MSDN的标准说法:“对密钥进行配置,以便将其用于对 Forms 身份验证 Cookie 数据和视图状态数据进行加密和解密,并将其用于对进程外会话状态标识进行验证。”也就是说Asp.Net的很多加密,都是依赖于machineKey里面的值,例如Forms 身份验证 Cookie、ViewState的加密。默认情况下,Asp.Net的配置是自己动态生成,如果单台服务器当然没问题,但是如果多台服务器负载均衡,machineKey还采用动态生成的方式,每台服务器上的machinekey值不一致,就导致加密出来的结果也不一致,不能共享验证和ViewState,所以对于多台服务器负载均衡的情况,一定要在每台站点配置相同的machineKey。 machineKey生成的算法: validationKey = CreateKey(20); decryptionKey = CreateKey(24);      protected string CreateKey(int len)      {             byte[] bytes = new byte[len];             new RNGCryptoServiceProvider().GetBytes(bytes);               StringBuilder sb = new StringBuilder();               for(int i = 0; i < bytes.Length; i++)               {                       sb.Append(string.Format("{0:X2}",bytes[i]));               }               return sb.ToString();      } 附参考的matchineKey配置: <?xml version="1.0"?> <configuration>   <system.web>     <machineKey validationKey="3FF1E929BC0534950B0920A7B59FA698BD02DFE8" decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A77" decryption="3DES" validation="SHA1"/>      </system.web> </configuration>...[阅读全文]

posted @ | Feedback (11) | Filed Under [ Web技术 ]

摘要:模版页中难免要引用CSS、脚本、图片等,这些文件的路径如果简单的使用相对路径,那么如果引用模版的目录一发生变化,这些路径就会出错;如果使用绝对路径,又不够灵活,如果应用程序目录发生变化,可能会导致要大量修改。asp.net支持一种相对于应用程序的路径,以波浪线开头的,形如"~/",使用它即可解决,例如:<link rel="stylesheet" media="screen" type="text/css" href="<%=ResolveClientUrl("~/css/global.css") %>" /> 当然如果你觉得每个路径都要写成动态的不爽,而又正好有页面基类的话,倒是可以换一种方式: 所有的路径直接书写为相对于应用程序目录的路径,形如:<link rel="stylesheet" media="screen" type="text/css" href="~/css/global.css" />当然默认HTML是不支持的这样的路径方式的,这时候就要借助PageBase了,代码如下(好像是从DNN的代码里面抠出来的):       public abstract class PageBase : Page     {         protected override void Render(HtmlTextWriter writer)         {             StringWriter stringWriter = new StringWriter();             HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);             base.Render(htmlWriter);             string html = stringWriter.ToString();             #region 转换相对路径             MatchCollection collection = Regex.Matches(html, "<(a|link|img|script|input|form).[^>]*(href|src|action)=(\\\"|'|)(.[^\\\"']*)(\\\"|'|)[^>]*>", RegexOptions.IgnoreCase);             foreach (Match match in collection)             {                 if (match.Groups[match.Groups.Count - 2].Value.IndexOf("~") != -1) ......[阅读全文]

posted @ | Feedback (21) | Filed Under [ Web技术 ]

让DotText095支持LiveWriter直接上传照片,主要是代码!

posted @ | Feedback (15) | Filed Under [ Web技术 ]

摘要:VS2005里面新建Web站点时可以从模板创建,默认有一个“Personal Web Site Starter Kit”的模板,是一个人网站程序,根据这个模板可以很容易扩展出自己的个人站点。 其实还有一个模板程序叫“Club Site Starter Kit”,VS2005RTM默认安装时没有带,不过可以从MSDN上下载到: Club Site Starter Kit   Features   A starting point for creating a web site for your club or organization. Includes a news posting, calendaring, member directory, and photo album systems.  See more about the Club Site Starter Kit:Try it Live!Download Starter Kit(version 50215.45.01, released 4/14/2005)View Whitepaper (coming soon)Generic Scripts for SQL Server 2000 and MSDE Event Calendar ControlView Discussion Forum News Create announcements and news articles Include a photo, or link to a photo album Event calendaring Create events for your club View as a list or calendar Download events to Outlook or other calendaring application Event......[阅读全文]

posted @ | Feedback (8) | Filed Under [ Web技术 ]

摘要:如果您想在页面中显示出来当前asp.net程序占用了多少内存,那么可以使用:             double memoryUsage = (((double)System.Diagnostics.Process.GetCurrentProcess().WorkingSet64) / 1024) / 1024; 来计算,单位是MB。...[阅读全文]

posted @ | Feedback (14) | Filed Under [ Web技术 ]

摘要:可能我们Membership的用户数据库是从其它系统导入的,例如动网论坛,那么用户系统用的加密方式和membership不一样的,也就是使用Membership就无法登录了,我曾试通通过继承Membership重写其中方法来实现,但是发现很多方法都无法override,这点Membership设计太失败了! 还好微软发布了Provider实现的源码《asp.net2.0自带的Provider源码下载》,这样我就可以通过修改Provider来实现了,SQLMembershipProvider中有一个CheckPassword方法,在里面,增加了对其他用户密码加密的支持,然后在web.config中,指定membership的provider为您修改后的Provider...[阅读全文]

posted @ | Feedback (9) | Filed Under [ Web技术 ]

摘要:倒不是最近写asp了,而是最近在写asp.net时想到的。以前在文章《Asp无组件上传带进度条(续)》中,提供了asp无组件上传带进度条的解决方案,但是当时都是内存操作,如果文件大很占内存,因为vbs的语法对IO操作的功能有限,无法对分块的内容进行拼合,所以只能在内存操作。 除了IO和内存可以将分块拼合,还有第三种方式可以——数据库,ado支持AppendChunk方法,Sql也支持UPDATETEXT。 大概思路是这样的:分块上传,对当前分块进行解析,解析后,将分块中解析出来的文件的内容分块都追加相应的数据库记录中,这样就可以保证内存占用非常小了,因为数据都转移到数据库中了,最后传完了,从数据库中取出来就可以了。 虽然我没写,但是这种方案是肯定可行的。不过因为我不再写asp代码了,所以找我要代码是没有的,如果有哪位达人写出来了,不妨共享一下,谢谢! 附:我以前写的asp无组件上传源码 http://webuc.net/myproject/upload/demo.htm...[阅读全文]

posted @ | Feedback (12) | Filed Under [ Web技术 ]

摘要:我一直觉得Asp.Net2.0的Membership不够用,例如:不能自定义密码类型,不能获取角色Id,不能方便的检测用户名或Email是否存在……,总之还是不能完全满足自己的要求,那么就自己扩展吧,但是总是不那么爽,重新实现一套Provider吧,太麻烦了。今天偶然读到这个blog:《Source Code for the Built-in ASP.NET 2.0 Providers Now Available for Download》,发现可以下载其Provicer源码,这样可以在其基础上做我们自己的Provider了,省事多了!下载:http://download.microsoft.com/download/a/b/3/ab3c284b-dc9a-473d-b7e3-33bacfcc8e98/ProviderToolkitSamples.msi...[阅读全文]

posted @ | Feedback (22) | Filed Under [ Web技术 ]

摘要:我以前一直知道有一个 http://www.asp.net 网站,不知道还有一个http://www.windowsforms.net/,专门面向.Net Framework Windows Forms的,有不少不错的.Net源码,例如有一个.Net2.0写的Windows Forms RSS Portal 挺不错的。...[阅读全文]

posted @ | Feedback (8) | Filed Under [ Web技术 ]

Full Web技术 Archive