Single Sign On (单点登陆) 以及Session过期问题的解决方案

1.         Single Sign On

目的:多个Web应用有统一的登陆以及一次登陆完成所有Web应用的认证。

原理:利用Form认证,认证后的Cookie,使得参与Web应用的都具有一组相同的用于加密与验证加密的密钥。加密与验证加密的密钥位于 Machine.config 中,修改  <system.web> 节点下的 <machineKey> 节点属性。

应用范围:位于同一服务器上的各个Web应用。

       ---login.aspx

            if(FormsAuthentication.Authenticate(txtUser.Text,txtPassword.Text))

         {

              FormsAuthentication.RedirectFromLoginPage(txtUser.Text,false);

         }

         else if(用户认证)

         {

              Session["UserName"]=txtUser.Text;

              FormsAuthentication.SetAuthCookie(txtUser.Text,false);

              FormsAuthentication.RedirectFromLoginPage(txtUser.Text,false);

         }

         else

              Response.Write("Login Error...");

         }

       --Web.Config配置

       <authenticationmode="Forms">

<formsname="Shmzh.SingleSignOn"protection="Encryption"timeout="60"loginUrl="login.aspx"/>

    </authentication>

     <machineKey

         validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572_487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE"

         decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F"

         validation="SHA1">

     </machineKey>

     <authorization>

         <denyusers="?"></deny>

     </authorization>

           ---default.aspx

       --Web.Config配置

       <authentication mode="Forms">

       <forms name="Shmzh.SingleSignOn" protection="Encryption" timeout="60" loginUrl="\SSO\Login.aspx" />

    </authentication>   

     <machineKey

         validationKey= "C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE"

         decryptionKey= "8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F"

         validation="SHA1">

     </machineKey>

       <authorization>

              <deny users="?"></deny>

       </authorization>

             ---default.aspx

--Web.Config配置,每一个站点的配置同

            ---default.aspx

       --Web.Config配置,每一个站点的配置同

       ---default.aspx

       --Web.Config配置,每一个站点的配置同

      

       Default.aspx中的代码

       if(User.Identity.IsAuthenticated)    //判断是否已经验证

       {

              //用户验证以及初始化Session

              User.Identity.Name 就是登录的用户

       }

2.         Session过期问题

通过设置Session过期时间来完成

a>     IIS中设置过期时间

 

b>     Web.Config中设置时间

    <sessionStatemode="InProc"cookieless="false" timeout="20/>

 

实例2:

HttpContext.Current.User.Identity.IsAuthenticated=false;

HttpContext.Current.User.Identity.Name==""

解释:当用户登录时,服务器为确认客户端通过验证要通过cookie向客户端写验证(Authenticat)信息,在登录页面刚验证完成后服务器 还没有把cookie 回发到Client,所以会没有值,当服务器第二次Response的时候,就会从客户端读取Cookie,要想有此Cookie还要在 web.config文件中配置相应的参数

<system.web>
    <authentication mode="Forms">
      <forms domain="bokoAdmin" timeout="20" loginUrl="Login.aspx" path="/"></forms>
    </authentication>

   <authorization>
      <allow users="*"/>
    </authorization>

<system.web>

程序验证:

            if (Membership.ValidateUser(tbx_username.Text.TrimEnd(), tbx_password.Text.TrimEnd()))
            {
               
                FormsAuthentication.SetAuthCookie(tbx_username.Text.TrimEnd(), true,FormsAuthentication.FormsCookiePath);
                FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
    1, tbx_username.Text, DateTime.Now, DateTime.Now.AddMinutes(20), false, tbx_username.Text);
                // generate new identity
                FormsIdentity identity = new FormsIdentity(ticket);
                HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));
                // write to client.
                Response.Cookies.Add(cookie);

                }

其中加粗体为主要语句,有此一句就可以实现HttpContext.Current.User.Identity.IsAuthenticated=true;

你可能感兴趣的:(session)