仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 785|回复: 10
打印 上一主题 下一主题

[学习教程] ASP.NET编程:ASP.NET FormsAuthentication跨站点登录时相对地点前往的成绩仓酷云 ...

[复制链接]
萌萌妈妈 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:20:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
来吧!老师们!我代表千千万万的asp.net/C#的初学者在这里呼唤着!关头字:FormsAuthentication,loginUrl,ReturnUrl,AbsoluteUri
在ASP.NET使用程序中,FormsAuthentication几近是标配,但FormsAuthentication在计划时却没有思索登录程序与以后程序不在统一个站点的场景。这个场景最基础的需求就是往另外一个站点登录乐成后前往要原地。但是FormsAuthentication在传送ReturnUrl时只撑持绝对路径,不撑持相对地点,也没有供应响应的扩大。
好比我们在admin.cnblogs.com站点的web.config中举行了以下的FormsAuthentication设置:
  1. <authenticationmode="Forms"><formsloginUrl="http://passport.cnblogs.com/login.aspx"timeout="2880"enableCrossAppRedirects="true"/></authentication><authorization><denyusers="?"/></authorization>
复制代码
会见admin.cnblogs.cc/Home/Index,会被重定向至passport.cnblogs.com/login.aspx?ReturnUrl=%2fHome%2fIndex,如许登录后就回不来了。
那怎样办理这个成绩呢?
今朝找到了三种办法:
办法一:在以后使用程序增加一个登录跳板页,web.config中的loginUrl指向该跳板,在跳板中猎取ReturnUrl的相对地点,再重定向至实践登录页面。
好比在ASP.NETMVC中,我们能够用一个Controller的Action作为跳板,代码以下:
  1. publicclassLoginController:Controller{publicActionResultRedirect(){varloginUrl="http://passport.cnblogs.com/login.aspx";varreturnUrl="?ReturnUrl=http://"+Request.Url.Host+Request.QueryString["ReturnUrl"];returnRedirectPermanent(loginUrl+returnUrl);}}
复制代码
然后将web.config中的loginUrl指向该Action。
该办法的弱点是要举行两次重定向。
办法二:在Global.asax的Application_PostAuthenticateRequest事务中将ReturnUrl设置为相对地点,偏重定向至登录页面。
代码以下(代码来自http://forums.asp.net/t/1358796.aspx):
  1. protectedvoidApplication_PostAuthenticateRequest(objectsender,EventArgse){if(!UrlAuthorizationModule.CheckUrlAccessForPrincipal(Request.AppRelativeCurrentExecutionFilePath,Context.User,Request.RequestType)){Response.Redirect(String.Format("{0}?ReturnUrl={1}",FormsAuthentication.LoginUrl,Request.Url.AbsoluteUri));}}
复制代码
办法三:在Global.asax的Application_EndRequest事务中修正Response.RedirectLocation,将ReturnUrl的交换为相对地点。
代码以下(代码来自DavidFindleysBlog):
  1. protectedvoidApplication_EndRequest(objectsender,EventArgse){stringredirectUrl=this.Response.RedirectLocation;if(!string.IsNullOrEmpty(redirectUrl)){this.Response.RedirectLocation=Regex.Replace(redirectUrl,"ReturnUrl=(?url.*)",delegate(Matchm){stringurl=HttpUtility.UrlDecode(m.Groups["url"].Value);Uriu=newUri(this.Request.Url,url);returnstring.Format("ReturnUrl={0}",HttpUtility.UrlEncode(u.ToString()));},RegexOptions.Singleline|RegexOptions.IgnoreCase|RegexOptions.ExplicitCapture);}}
复制代码
该办法的弱点是要针对一切重定向的URL举行处置,不单单是登录。
我们选用的是第二种办法。你是怎样办理这个成绩的?有无更好的办法?
这个成绩完整归罪于FormsAuthentication的计划成绩,事先碰到这个成绩,都不敢信任微软没思索到这个,然后看了一下FormsAuthentication的代码,真是无语。。。
明天写这篇博文出来宣泄一下,以解心头之恨。
从中失掉的启发:糟的计划会被良多人骂良多年,而优异的计划会千古流芳。
前几天同学问我学习方向的问题。有点想法,不知道对不对,怕误导同学,现在“开源一下”。注:括号内是我现在整理的时填加上的。
再现理想 该用户已被删除
沙发
发表于 2015-1-20 20:51:41 | 只看该作者
逐步缩小出错代码段的范围,最终确定错误代码的位置。
板凳
发表于 2015-1-30 05:00:29 | 只看该作者
ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp)。
再见西城 该用户已被删除
地板
发表于 2015-2-5 10:38:20 | 只看该作者
碰到复杂点的问题都不知道能不能解决,现在有点实力的公司都选择自已在开源的基础上做开发。但没听说过有人在IIS上做改进的,windows、sqlserver集群方面的应用也很少见。
只想知道 该用户已被删除
5#
发表于 2015-2-11 09:09:41 | 只看该作者
但是目前在CGI中使用的最为广泛的是Perl语言。所以,狭义上所指的CGI程序一般都是指Perl程序,一般CGI程序的后缀都是.pl或者.cgi。
精灵巫婆 该用户已被删除
6#
发表于 2015-2-15 18:48:05 | 只看该作者
最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。
蒙在股里 该用户已被删除
7#
发表于 2015-3-4 12:36:55 | 只看该作者
同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。
海妖 该用户已被删除
8#
发表于 2015-3-6 02:34:34 | 只看该作者
现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。
小妖女 该用户已被删除
9#
发表于 2015-3-7 02:06:22 | 只看该作者
逐步缩小出错代码段的范围,最终确定错误代码的位置。
简单生活 该用户已被删除
10#
发表于 2015-3-14 00:51:33 | 只看该作者
当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。
变相怪杰 该用户已被删除
11#
发表于 2015-3-20 22:58:06 | 只看该作者
主流网站开发语言之PHPHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 21:05

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表