跨站点的单点登录

 

1、Web.config里设置Form登录,name为Cookie名,关键在于domain和loginUrl。把几个要单点登录的站点做同样设置。

    < authentication  mode ="Forms" >
    
< forms  name ="rkanr_validuser"  domain =".rkr.com"    loginUrl ="http://user.rkr.com/SignIn.aspx" />
   
</ authentication >

2、写默认转跳的方法。

          /// <summary>
         
/// 返回原先登陆页面地址
         
/// </summary>
         
/// <returns></returns>

          public   static   string  GetLoginUrl()
         
{
             
return "http://" + WebHelper.Domain.UserDomain + "/SignIn.aspx?ReturnUrl=" + System.Web.HttpContext.Current.Server.UrlEncode(GetUrl());
         }


         
/// <summary>
         
/// 直接跳转向页面
         
/// </summary>

          public   static   void  RedirectLoginPage()
         
{
             System.Web.HttpContext.Current.Response.Redirect(GetLoginUrl());
         }

3、点击登录或注销时调用上面的方法,页头如果要判断是否登录也一样

      protected   void  btnLogin_Click( object  sender, EventArgs e)
     
{
         
if (Profile.IsAnonymous)
         
{
             WebHelper.Pages.RequestInfo.RedirectLoginPage();
         }

         
else
         
{
             FormsAuthentication.SignOut();
             Response.Redirect(Session[
"CurrUrl"].ToString());
         }

     }

注意上面注销的时候要转跳,其实转跳的地方就是本页面,因为注销要刷新才看到效果,不得已而为之
     protected   void  Page_Load( object  sender, EventArgs e)
     
{
         
if (!IsPostBack)
         
{
             Session[
"CurrUrl"= WebHelper.Pages.RequestInfo.GetUrl();
        }

     }

4、登录页面显示时保存要转跳的地址

      private   void  Page_Load( object  sender, EventArgs e)
     
{
         
//自动转跳,start
         if (this.Request.QueryString["ReturnUrl"!= null)
         
{
             
string ReturnUrl = WebHelper.Pages.RequestInfo.GetQueryString("ReturnUrl");
             Session[
"ReturnUrl"= ReturnUrl;
         }

         
//自动转跳,end
     }

5、点击登录时,如成功就转跳回要返回的地址

      /// <summary>
     
/// 登陆
      
/// </summary>
     
/// <param name="sender"></param>
     
/// <param name="e"></param>

      protected   void  btnLogin_Click( object  sender, EventArgs e)
     
{
         
//收集数据
         string strUserName = this.txtUserName.Text.Trim();
         
string strPsw = this.txtPsw.Text.Trim();
         
string strValidTime = rbtnValidTime.SelectedItem.Text;

         
if (Membership.ValidateUser(strUserName, strPsw))
         
{
             setValidTime(strValidTime, strUserName);

             
//测试返回地址是否存在,start
             if (Session["ReturnUrl"!= null)
             
{
                 Response.Redirect(Session[
"ReturnUrl"].ToString());
             }

             
//测试返回地址是否存在,end
         }

         
else
         
{
             lblTipInfo.Text 
= "登陆失败,请重新输入!";
         }

     }



     
/// <summary>
     
/// 设置有效时间,注释的部分原本是要的,但要跨站点登录就不需要了
     
/// 而是在上面的方法中转跳,因为系统的转跳只到本站点
     
/// </summary>
     
/// <param name="strValid"></param>

      protected   void  setValidTime( string  strValid,  string  strUserName)
     
{
         
string encTicket;
         FormsAuthenticationTicket ticketObj;

         
switch (strValid)
         
{
             
case "永远":
                 ticketObj 
= new FormsAuthenticationTicket(strUserName, true86400);
                 encTicket 
= FormsAuthentication.Encrypt(ticketObj);
                 Response.Cookies.Add(
new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
                 
//FormsAuthentication.RedirectFromLoginPage(strUserName, true);
                 FormsAuthentication.SetAuthCookie(strUserName, true);
                 
break;
             
case "一个月":
                 ticketObj 
= new FormsAuthenticationTicket(strUserName, true43200);
                 encTicket 
= FormsAuthentication.Encrypt(ticketObj);
                 Response.Cookies.Add(
new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
                 
//FormsAuthentication.RedirectFromLoginPage(strUserName, true);
                 FormsAuthentication.SetAuthCookie(strUserName, true);
                 
break;
             
case "一天":
                 ticketObj 
= new FormsAuthenticationTicket(strUserName, true1440);
                 encTicket 
= FormsAuthentication.Encrypt(ticketObj);
                 Response.Cookies.Add(
new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
                 
//FormsAuthentication.RedirectFromLoginPage(strUserName, true);
                 FormsAuthentication.SetAuthCookie(strUserName, true);
                 
break;
             
case "一小时":
                 ticketObj 
= new FormsAuthenticationTicket(strUserName, true60);
                 encTicket 
= FormsAuthentication.Encrypt(ticketObj);
                 Response.Cookies.Add(
new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
                 FormsAuthentication.SetAuthCookie(strUserName, 
true);
                 
//FormsAuthentication.RedirectFromLoginPage(strUserName, true);
                 break;
             
//浏览器进程
             default:
                 
//FormsAuthentication.RedirectFromLoginPage(strUserName, false);
                 FormsAuthentication.SetAuthCookie(strUserName, true);
                 
break;
         }

     }
 
CCF大数据与计算智能大赛-面向电信行业存量用户的智能套餐个性化匹配模型联通赛-复赛第二名-【多分类,embedding】.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值