ASP.NET多站点共享Form验证状态

站点A

 
  
< authentication mode ="Forms" >
    < forms name =".CNBLOGS" enableCrossAppRedirects ="false" loginUrl ="Login.aspx" defaultUrl ="MyAccount.aspx" timeout ="1440" ></ forms >
</ authentication >
 
  
< machineKey validationKey ="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE"
decryptionKey
="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F" validation ="SHA1" />

站点B和站点A的配置要一样,尤其是machineKey。

 
  
< forms name =".CNBLOGS" enableCrossAppRedirects ="false" loginUrl ="http://localhost:3760/Login.aspx" defaultUrl ="Country.aspx" timeout ="1440" ></ forms >
 
  
< machineKey validationKey ="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE"
decryptionKey
="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F" validation ="SHA1" />

这时,打开站点B的page就会跳转到站点A的login.aspx,可是ReturnURL丢失了站点B的domain,可以在Global中添加下面的代码:

 
  
protected void Application_PostAuthenticateRequest(object sender, EventArgs e)
{
HttpContext ctx = ((HttpApplication)sender).Context;
HttpRequest req = ctx.Request;
HttpResponse resp = ctx.Response;
if (!UrlAuthorizationModule.CheckUrlAccessForPrincipal(req.AppRelativeCurrentExecutionFilePath, ctx.User, req.RequestType))
{
HttpContext.Current.Response.Redirect(String.Format("{0}?ReturnUrl={1}", FormsAuthentication.LoginUrl, Server.UrlEncode(req.Url.AbsoluteUri)));
}
}

转载于:https://www.cnblogs.com/lethe2046/archive/2011/06/23/2088345.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值