感悟生活

Life is like a box of chocolates. You never know what you're gonna get.
随笔 - 97, 评论 - 983, 引用 - 46

导航

关于

标签

每月存档

最新留言

  • iwobz
    <p>看了你那篇用程序登陆asp.net的文章,我觉得你是在骗人,昨天我也写这样的程序,我也把那些viewstate,username,password和eventvalidation那些...
    by iwobz(注册) on 2009/11/29 15:10:41
  • re:SharePoint的小秘密
    <p>@开心就好:测试2</p>
    by 开心就好(注册) on 2009/1/8 22:36:27
  • re:SharePoint的小秘密
    <p>@开心就好:测试</p>
    by 开心就好(注册) on 2009/1/8 22:30:45
  • 回复: 微软拼音输入法2003
    你好,我需要下载,谢谢
    by 李鑫龙(匿名) on 2008/2/20 12:56:00
  • 回复: 微软拼音输入法2003
    你好,我需要下载,谢谢
    by ヤ偽妳變儍い(匿名) on 2008/2/18 16:07:00
  • 回复: 微软拼音输入法2003
    我要用反体字聊QQ
    by 郝语情(匿名) on 2008/2/14 3:33:00
  • 回复: 微软拼音输入法2003
    我要下载
    by ﹏賎侽魜▓(匿名) on 2008/1/23 1:04:00
  • 回复: 有限状态机 理论联系实际
    写程序没理论指导,不重视基础,到现在才发现问题,本末倒置的学习过程。要是有正确的学习方法,水平远应比现在高。
    by wr(匿名) on 2008/1/15 18:08:00
  • SOA基本介绍
    Webservice已经不再是新婚的娘子。众多企业都已经创建各种实验性WebServices项目,事实证明,这项新兴的分布式计算技术确实能够降低集成和开发的成本。另外,一些关键的WebServ...
    by IamV(匿名) on 2007/12/31 16:31:00
  • 回复: SharePoint的小秘密
    在管理中心可以查看Site Collection使用哪个Content DB!
    by it(匿名) on 2007/12/25 11:10:00

广告

【第1页/共2页,14条】
首页
前页
1

在Whidbey中实现Provider

这两天在看Whidbey的时候,尝试使用Asp.Net Configuration Tools中的Security工具配置Sql Server数据库,结果总是不成功。我想原因可能是PDC Preview版本的Whidbey,这个工具的功能还没有完全实现。因此我就尝试自己实现Provider来连自己的数据库。

总结了一下,放在文章里了:在Whidbey中实现Provider

posted on 2004-03-24 17:07:00 by sam1111  评论(0) 阅读(1139)

在Whidbey中实现Provider

Asp.Net 2.0codename Whidbey)通过Provider模式为用户验证、角色管理等方面提供了非常强大易用的框架模型。Whidbey中提供了一个Asp.Net configuration工具,通过它可以非常容易地配置用户信息数据库,管理角色等等,再与新加入的Security控件配合,几乎不用写什么代码就能够实现用户验证和角色管理功能。关于这些控件和配置工具的具体使用,可以参考这篇文章:使用更精简的代码保证 ASP.NET 应用程序的安全

 

但是在PDC Preview版本的Whidbey中,这个配置工具的功能还不是很完善。从我使用的情况来看,它目前还只能创建和连接自己的Demo用的Access数据库,不能连接SQL Server数据库进行扩展。因此,为了能够连接SQL Server,我们必须提供我们自己的Providers。这里以连接IBuySpyPortal数据库为例来说明如何实现一个Membership Provider

 

为了搞清楚如何实现我们自己的Membership Provider,有必要先看看Whidbey默认使用的Membership Provider是如何做的。在machine.config配置文件中,Whidbey使用类似下面这样的配置实现:

 

<membership defaultProvider="AspNetAccessProvider" userIsOnlineTimeWindow="15" >

    <providers>

        <add name="AspNetSqlProvider"

            type="System.Web.Security.SqlMembershipProvider, System.Web, Version=1.2.3400.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"

            connectionStringName="LocalSqlServer"

            enablePasswordRetrieval="false"

            enablePasswordReset="true"

            requiresQuestionAndAnswer="false"

            applicationName="/"

            requiresUniqueEmail="false"

            passwordFormat="Hashed"

            description="Stores and retrieves membership data from the local Microsoft SQL Server database"

        />

 

        <add name="AspNetAccessProvider"

            type="System.Web.Security.AccessMembershipProvider, System.Web, Version=1.2.3400.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"

            connectionStringName="AccessFileName"

            enablePasswordRetrieval="false"

            enablePasswordReset="true"

            requiresQuestionAndAnswer="false"

            applicationName="/"

            requiresUniqueEmail="false"

            passwordFormat="Hashed"

            description="Stores and retrieves membership data from the local Microsoft Access database file"

        />

    </providers>

</membership>

 

关于这段配置文件的更详细解说,可以参考《A First Look at ASP.NET v. 2.0》。

 

可以看出,Whidbey默认使用SqlMembershipProvider或者AccessMembershipProvider来进行用户验证和管理。这两个Provider实现了IProviderIMembershipProvider接口,实际上这两个接口也是每个MembershipProvider所必需的,其中IProvider负责Provider的初始化,而IMembershipProvider则实现MembershipProvider的主要功能。它们的定义如下:

 

namespace System.Configuration.Provider

{

    public interface IProvider

    {

        public string Name { get; }

        public void Initialize(string name,

            System.Collections.Specialized.NameValueCollection config);

    }

}

 

namespace System.Web.Security

{

    public interface IMembershipProvider

    {

        public bool ChangePassword(string name, string oldPwd,

            string newPwd);

        public bool ChangePasswordQuestionAndAnswer(string name,

            string password,

            string newPwdQuestion, string newPwdAnswer);

        public System.Web.Security.MembershipUser CreateUser(

            string username,

            string password, string email,

            out System.Web.Security.MembershipCreateStatus status);

        public bool DeleteUser(string name);

        public System.Web.Security.MembershipUserCollection GetAllUsers();

        public int GetNumberOfUsersOnline();

        public string GetPassword(string name, string answer);

        public System.Web.Security.MembershipUser GetUser(string name,

            bool userIsOnline);

        public string GetUserNameByEmail(string email);

        public string ResetPassword(string name, string answer);

        public void UpdateUser(System.Web.Security.MembershipUser user);

        public bool ValidateUser(string name, string password);

        public string ApplicationName {get; set;}

        public bool EnablePasswordReset { get;}

        public bool EnablePasswordRetrieval { get;}

        public bool RequiresQuestionAndAnswer { get;}

    }

}

 

现在可以动手来实现我们自己的MembershipProvider了:

 

public class MyMembershipProvider : IProvider, IMembershipProvider

{

    ……

}

 

验证功能是必需的:

 

public bool ValidateUser (string name, string password)

{

    string connectStr = ConfigurationSettings.ConnectionStrings["PortalData"];

    SqlConnection myConnection = new SqlConnection (connectStr);

    SqlCommand myCommand = new SqlCommand ("UserLogin", myConnection);

    myCommand.CommandType = CommandType.StoredProcedure;

 

    // Add Parameters to SPROC

    SqlParameter parameterEmail = new SqlParameter ("@Email", SqlDbType.NVarChar, 100);

    parameterEmail.Value = name;

    myCommand.Parameters.Add (parameterEmail);

 

    SqlParameter parameterPassword = new SqlParameter ("@Password", SqlDbType.NVarChar, 20);

    parameterPassword.Value = password;

    myCommand.Parameters.Add (parameterPassword);

 

    SqlParameter parameterUserName = new SqlParameter ("@UserName", SqlDbType.NVarChar, 100);

    parameterUserName.Direction = ParameterDirection.Output;

    myCommand.Parameters.Add (parameterUserName);

 

    // Open the database connection and execute the command

    myConnection.Open ();

    myCommand.ExecuteNonQuery ();

    myConnection.Close ();

    if ((parameterUserName.Value != null) && (parameterUserName.Value != System.DBNull.Value))

        return true;

 

    return false;

}

 

现在在web.config中可以这样配置connectionString了:

<connectionStrings>

    <add name="BugDepotData" connectionString="Data Source=(local);Trusted_Connection=true;Database=Portal" />

</connectionStrings>

 

这样,我们自己的一个简单的MembershipProvider就基本上完成了。接下来需要配置web.config,让需要Provider服务的控件能够认识它:

<membership>

    <providers>

        <add name="MyMembershipProvider"

                type="MyMembershipProvider"

                appName="/" />

    </providers>

</membership>

 

这段设置是参考machine.config而来的,其中type属性的值是这样的字符串:

type="ProviderType, Assembly, Version, Culture, PublicKeyToken"

由于我们的MyMembershipProvider放在/Code目录下,并不是在单独的Assembly中,因此只需要指出ProviderType就行了。

 

这样,一个具有验证功能的Provider就完成了,现在可以在页面上放一个新的Security控件,比如Login控件,并指定它的MembershipPropertyMyMembershipProvider(或者也可以设置membershipdefaultProvider属性为MyMembershipProvider),打开Forms验证,试试是不是已经能够成功登陆了?J

 

posted on 2004-03-24 16:54:00 by sam1111  评论(2) 阅读(2249)

IQ测试

Wesner Moise那里看到一个internet上的IQ测试,就跑去试了一把。结果只有122分悲伤的脸

Your Intellectual Type is Precision Processor. This means you're exceptionally good at discovering quick solutions to problems, especially ones that involve math or logic. You're also resourceful and able to think on your feet. And that's just some of what we know about you from your test results.

不像Moise有144分,不过我想,差距主要在于,他是第二次做,并且由于是英文测试,对于一些词语题目,对于单词的确切含义的理解我不如他笑脸

posted on 2004-03-23 12:02:00 by sam1111  评论(117) 阅读(35495)

感受XP SP2

孙展波那里看到了XP SP2 Preview的消息,就down了一个回来试了试。

感觉上SP2在网络安全方面的改进是挺大的,IE的改进防火墙的增强,已经使我卸掉了google toolbar和费尔个人防火墙,以后也不用担心3721了,因为我它已被我加入了永远不许装的列表中笑脸

SP2对无线网络的支持也有所增强。除了增加了新的无线网络配置向导之外,似乎对无线设备本身的支持更强了。我们公司在2楼和4楼各有一个无线基站,我在4楼工作,原本由于信号的问题无法看到2楼的无线网络,4楼的信号也只是普通。安装SP2之后,4楼的信号变成了Excellent,而且2楼的无线网络也出现在了网络列表中。

更多的好处我还在体验之中,大家也去down一个来装吧笑脸

posted on 2004-03-22 11:18:00 by sam1111  评论(18) 阅读(4015)

内存管理

还是开心的那个问题,我试了一下,问题是存在的,使用彭刚给出的工具,我得到了下面的报告(我的系统是Win2K3 + .NET FX 1.1,程序编译为debug版本):

First start
-------------------------------------------------------------------------------------
                                                   Totle               Private   Shareable Shared
                                            Pages    KBytes     KBytes  KBytes     KBytes
Grand Total Working Set     3723     14892       4736      2940         7216

Module Working Set Contributions in pages
    Total   Private Shareable    Shared Module
        4         2         2         0 ddddd.exe
       77         4         0        73 ntdll.dll
       27         3         0        24 mscoree.dll
       57         4         0        53 KERNEL32.dll
       30         3         0        27 ADVAPI32.dll
       40         2         0        38 RPCRT4.dll
       34         2         0        32 SHLWAPI.dll
       32         2         0        30 GDI32.dll
       49         2         0        47 USER32.dll
       34         4         0        30 msvcrt.dll
       13         2         0        11 IMM32.DLL
        8         2         0         6 LPK.DLL
       34         4         0        30 USP10.dll
      248        21         0       227 mscorwks.dll
       47         6         1        40 MSVCR71.dll
       39         3         0        36 fusion.dll
       31         8         0        23 SHELL32.dll
       17         2         0        15 comctl32.dll
      251         2         0       249 mscorlib.dll
      317        62       255         0 mscorlib.dll
       37         3         0        34 diasymreader.dll
       25         4         0        21 ole32.dll
       14         2         0        12 mscorsn.dll
       54         3         0        51 MSCTF.dll
        6         2         0         4 Cjktl32.dll
      277         1       141       135 system.windows.forms.dll
      273        40       233         0 system.windows.forms.dll
      171         1         0       170 system.dll
      451       385        66         0 system.dll
       63         2         0        61 MSCORJIT.DLL
       76         1         0        75 system.drawing.dll
      200       169        31         0 system.drawing.dll
        9         1         0         8 apphelp.dll
       41        36         0         5 msctfime.ime
       26         3         1        22 gdiplus.dll
       11         2         0         9 Msimtf.dll
        4         1         0         3 VERSION.dll
----------------------------------------------------------------------------------------
Minimized
----------------------------------------------------------------------------------------
                                                     Totle              Private   Shareable Shared
                                             Pages    KBytes     KBytes   KBytes    KBytes
Grand Total Working Set      169       676           416        64           196

Module Working Set Contributions in pages
    Total   Private Shareable    Shared Module
        6         1         0         5 ntdll.dll
        3         1         0         2 KERNEL32.dll
       11         2         0         9 USER32.dll
        5         2         0         3 IMM32.DLL
       18         4         0        14 mscorwks.dll
       11         6         5         0 mscorlib.dll
        7         2         0         5 MSCTF.dll
       22        12        10         0 system.windows.forms.dll
        8         8         0         0 msctfime.ime
----------------------------------------------------------------------------------------
Restored
----------------------------------------------------------------------------------------
                                                 Totle                  Private     Shareable Shared
                                             Pages    KBytes     KBytes    KBytes    KBytes
Grand Total Working Set      540      2160          968         300          892

Module Working Set Contributions in pages
    Total   Private Shareable    Shared Module
       25         2         0        23 ntdll.dll
       11         1         0        10 KERNEL32.dll
       10         3         0         7 ADVAPI32.dll
       13         2         0        11 GDI32.dll
       31         2         0        29 USER32.dll
        1         0         0         1 msvcrt.dll
        8         2         0         6 IMM32.DLL
        5         2         0         3 LPK.DLL
        7         0         0         7 USP10.dll
       60         7         0        53 mscorwks.dll
        1         0         0         1 MSVCR71.dll
       49        23        26         0 mscorlib.dll
       44         3         0        41 MSCTF.dll
        3         1         0         2 Cjktl32.dll
       77        29        48         0 system.windows.forms.dll
        8         8         0         0 system.dll
       14        14         0         0 system.drawing.dll
       11        11         0         0 msctfime.ime
        2         2         0         0 gdiplus.dll
        2         1         0         1 Msimtf.dll
-----------------------------------------------------------------------------------------

可以看出,程序启动时加载了许多系统和应用程序模块(比如Cjktl32.dll就是金山词霸的dll),这可能是为了JIT的需要(MSCORJIT.DLL),在最小化时这些模块被卸载了,还原之后,就只剩下了程序运行所需的模块了。这看起来是内存变化的主要原因。

如果程序不被最小化,那些JIT用到的模块什么时候被卸载呢?

posted on 2004-03-16 17:26:00 by sam1111  评论(2) 阅读(3857)

即时通讯软件

现在的即时通讯软件市场真是丰富多彩又如火如荼,MSN、QQ、雅虎通等等,这些即时通讯软件正闹得不可开交。现在连一直号称要做中国最大最专业的技术网站的CSDN也推出了自己的类似软件,CSDN即时通,看起来CSDN也打算在这个市场中分一杯羹了。

只是术业有专攻,希望CSDN别被越来越多的各种业务分了心。

posted on 2004-03-16 09:21:00 by sam1111  评论(39) 阅读(4784)

上海聚会

昨天参加了上海的聚会,见到了传说中的Grace,非常开心笑脸

Grace是个非常活跃的人,她会不停的push大家说话。而昨天的聚会,Zee的夫人是主角,大讲流行时尚、Zee和他的猫,而她在讲的时候,Zee就一脸幸福地看着他的夫人,让其他人就只有羡慕的份了。Zee有一个可爱的小动作,就是用食指摸自己的鼻子。

陈璐艺的话到是不多,但我对这家伙还是挺感兴趣的,回来上网搜了一下,发现这家伙不但是个技术牛人,而且户外运动也十分了得,有下面这段报道为证:

北京怀柔地区,上海交大学生常琳、陈璐艺与在某领事馆工作的龙雨田等11位上海人,用冰镐凿“醒”了冰冻的瀑布,踩着凿痕向山顶攀去。这是中国国家登山协会举办的冬季登山实用技术培训活动。活动吸引了来自全国各地的登山爱好者。

唯一有点可惜的是没有带相机,没有照片跟大家分享了悲伤的脸

posted on 2004-03-13 14:08:00 by sam1111  评论(12) 阅读(3014)

msstart.exe

这两天我的机子在使用IE的时候总有点问题。每次第一次运行IE,切换page的时候会弹出两个广告。思归告诉我,可能是我的机子上有spywares,并告诉我一个清除spyware的网站,http://www.spysweeper.com/free-spyware-removal.html,我从上面下了一个Spy Sweeper,扫描一遍,发现Cookie里面竟然有三四十处有问题!清除之后,原来弹出两个广告窗口,现在仍然会弹出一个来。

没办法,只好察看当前系统中的所有进程,发现了一个msstart.exe的进程比较可疑,搜了一下,发现msstart.exe位于system32下面,并且修改日期是2004-3-9,非常可疑。安全起见,我还是用google搜了一下,在http://www.pcpchina.com/forum/forum_posts.asp?TID=1140&PN=1发现了症状,用http://www.xfilt.com/tech/backdoor.livup.htm的方法清除之后,就再不会有广告窗口弹出了。不知道这个mstart.exe是怎么弄的,病毒软件对它竟然丝毫没有办法。

这两天博客堂的相册是不是有问题呀?我怎么看不到相册里的图片了?

posted on 2004-03-12 10:54:00 by sam1111  评论(28) 阅读(13403)

正确代码很难写

Wesner Moise在他的blog中说,Correct Code Is Hard To Write,他举例说,比如我们要写一个简单的整数比较函数,如果第一个整数比第二个小,返回负值,相等返回0,否则返回正值。通常我们会不假思索地写下下面的代码:

public int Compare(int i1, int i2)

{

  return i1 - i2;

}

 

这段代码看上去似乎毫无问题,实际上在极限情况下,即int.MaxValue和int.MinValue时,是会有问题的。他还举了其他一些例子,不过要我说,这还是细节的问题。

 

在他的另一篇随笔中看到,.NET中的Collection Library会在下一版本中增强,甚至会加入STL.NET。不知道会是个什么样子,期待ing。

posted on 2004-03-10 23:06:00 by sam1111  评论(5) 阅读(1281)

培育男孩

《培育男孩:塑造下一代男人》是一本向年轻的父母们讲述如何培养男孩子的书,作者从男孩子的世界开始写起,非常有趣。看看下面这段描写:

马克,俄亥俄州,生于1960年

  我和一个朋友在车库里发现了一个装有汽油的咖啡罐,于是就决定把它倒入检修孔,用火柴点燃,看看会发生什么。我们把孔敲开,倒了一些汽油进去,然后再把盖子盖上,稍稍留着点空隙。我们把点燃的火柴一根根扔下去,但是什么动静都没有,于是我们把所有的汽油都倒了进去。到后来,一种像是喷气飞机引擎发出的噪声传了出来,然后是“轰隆”一声巨响。检修孔的盖子给掀了起来,一股火焰窜到空中达15英尺高。地面发出了地震一般的声音,检修孔盖子飞到12英尺外的邻居家的车道上,接着汽油沿着下水道流了近一个街区,和下水道里的沼气一起汽化了,把好几家邻居的抽水马桶都给炸坏了。我现在是名管子工,因此我现在能准确地知道当时发生的情况。

有没有想起你自己童年时所做过的淘气事?

推荐给那些已经为人父母的朋友们,特别是豆腐,好好培养你家天天吧笑脸

posted on 2004-03-08 17:27:00 by sam1111  评论(5) 阅读(2475)

【第1页/共2页,14条】
首页
前页
1

Powered by: Joycode.MVC引擎 0.5.2.0