我正在使用母版页进行授权。我有三种不同的用户类型:读者,作者和管理员。
我有Main.Master
,其中包含我网页的基本内容。然后我有,
这些继承自Main.Master
。我正在检查用户是否真的已登录(Session
不为空),UserType
是否为Reader.Master
,Author.Master
,Admin.Master
s {{ 1}}函数。
第一个问题:这是一个好习惯吗?请注意,我没有使用其他ASP.NET内置函数进行用户管理,授权等的经验。
第二个问题:有一些页面如Page_Init()
所有ForgotPassword.aspx
应该访问同一页面。在我的结构中,我需要创建从三个不同的Master继承的三个不同的页面。如何解决这个问题?
答案 0 :(得分:1)
第二个问题:有一些页面像ForgotPassword.aspx,所有UserTypes都应访问同一页面。在我的结构中,我需要创建从三个不同的Master继承的三个不同的页面。如何解决这个问题?
以相同的方式创建User.Master
和Guest.Master
,您将获得所有类型用户的主人。
User.Master仅检查用户是否已登录。
答案 1 :(得分:1)
到第一个问题:我使用它类似。我不确定它是否是一个很好的解决方案,但它对我有用。
第二个问题:您可以在母版页中定义ContentPlaceHolder
。
<asp:ContentPlaceHolder ID="MyId" runat="server" />
在您的aspx网站中,为每个ContentPlaceHolder
个Content
容器定义。
<asp:Content ContentPlaceHolderID="PageContent" runat="server">
<!-- content for this area -->
</asp:Content>
如果您使用相同的ContentPlaceHolder
在三个用户类型母版页ID
中定义,则可以在Forgot.aspx等页面中使用每个母版页的相同内容。
答案 2 :(得分:1)
好吧,如果不是最佳做法,主页中的身份验证是可以接受的。我看过很多从这种教程开始的书。但是,当您的网站扩展时,您可能会遇到一些问题,同时处理除了haldler或global.asax等页面以外的身份验证相关数据可能会很痛苦。
但是当网站范围有限且您不需要高级功能时,这种身份验证就可以了。
关于你的第二个问题然后是你得到的是所用方法的副作用。您可以做的是使用三个主页中的任何一个创建一个页面。在您正在检查身份验证的母版页中,您将获得该页面的名称,以及页面名称是否与forgot.aspx相同,或者只是忽略了正常过程。
例如
if (System.IO.Path.GetFileName(Request.PhysicalPath).ToLower() == "forgot.aspx")
{
}
else
{
doauthentication();
}
答案 3 :(得分:0)
只需将其设置为不带母版页的普通Web表单页面,用户如果忘记密码就无法登录,您只需要向他们显示一个普通页面(如登录页面)