关于Asp.net的Forms认证,个人认为。。。

时间:2022-11-23 13:57:21
关于Asp.net的基于Forms认证,我觉得完全没有必要这么复杂,要在web.config,又要在global.asax,还要在login.aspx.cs中进行复杂而难以理解的设置,其实基于Forms认证,个人认为其主旨在于:针对不同角色的用户群,分派不同的权限,并完成角色认证后的自动页面跳转。要完成同样效果的用户认证,完全可以在users表中加入roles角色字段,然后在Login.aspx.cs中对users表中roles项提取放入session中,然后在main.aspx.cs中对session["roles"]进行判断,然后调用不同的main.aspx页面即可。

    个人刚读完一个基于Forms认证的项目,一点感受,大家认为我讲的有没道理,或者是这种认证可能还有我没看到的优势,请高手指点。

12 个解决方案

#1


呵呵

#2


不是微软把Form验证做复杂了
而是你把Form验证想简单了

#3


完全可以在users表中加入roles角色字段
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

角色字段这样放置的话,一个用户怎么对应多个角色?
还有你用session的方式做,没问题,可form验证用的是cookie,和你的不冲突啊
form验证本身还是很不错的

#4


Forms认证与你所说的唯一区别是它是加密放在Cookie里的
而不是在session中,在Forms认证中同样可以用你所说的那种认证方式、角色等

#5


Forms认证的好处是他是自动验证身份,未通过时自动跳转到登录页的
如果你用Session,必须自己对每一个页面加验证身份代码

#6


你只在main.aspx.cs中对session["roles"]进行判断
如果他在地址栏手动输入某个页面,难道就可以随便访问?

#7


//复杂而难以理解的设置
我怎么觉得是简单而易以理解的呢?

#8


谢谢各位的高见,以下如何?
  这样也足以实现了吧:
   web.config中:<authentication mode="Forms">
  <forms timeout="60" loginUrl="ST_Login.aspx"/>
        </authentication>

   Login.aspx.cs中:FormsAuthentication.SetAuthCookie(txtName.Text, false);
Response.Redirect("ST_Common/ST_Main.aspx");

   Main.aspx.cs中:int st_type = st_auth.ST_LoginType(Context.User.Identity.Name);

#9


你这种实现方式不就是Form吗?

孙悟空就以为自己能跳出如来的手掌呢

#10


楼主很聪明,孺子可教~

#11


我是说省却了 FormsAuthenticationTicket ticket = new FormsAuthenticationTicket( 
                    1, 
                    UserNameTextBox.Text,
                    DateTime.Now, 
                    DateTime.Now.AddMinutes(30), 
                    true, 
                    reader.GetString(0),
                    FormsAuthentication.FormsCookiePath);
                string hash = FormsAuthentication.Encrypt(ticket);
                HttpCookie cookie = new HttpCookie(
                    FormsAuthentication.FormsCookieName, 
                    hash);
和global.asax.cs中的代码设置,省不省略这一部分的区别主要体现在哪些方面?

#12


这部分加上去以后,可以实现基于角色的授权,前面的都是基于用户的单个授权。

#1


呵呵

#2


不是微软把Form验证做复杂了
而是你把Form验证想简单了

#3


完全可以在users表中加入roles角色字段
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

角色字段这样放置的话,一个用户怎么对应多个角色?
还有你用session的方式做,没问题,可form验证用的是cookie,和你的不冲突啊
form验证本身还是很不错的

#4


Forms认证与你所说的唯一区别是它是加密放在Cookie里的
而不是在session中,在Forms认证中同样可以用你所说的那种认证方式、角色等

#5


Forms认证的好处是他是自动验证身份,未通过时自动跳转到登录页的
如果你用Session,必须自己对每一个页面加验证身份代码

#6


你只在main.aspx.cs中对session["roles"]进行判断
如果他在地址栏手动输入某个页面,难道就可以随便访问?

#7


//复杂而难以理解的设置
我怎么觉得是简单而易以理解的呢?

#8


谢谢各位的高见,以下如何?
  这样也足以实现了吧:
   web.config中:<authentication mode="Forms">
  <forms timeout="60" loginUrl="ST_Login.aspx"/>
        </authentication>

   Login.aspx.cs中:FormsAuthentication.SetAuthCookie(txtName.Text, false);
Response.Redirect("ST_Common/ST_Main.aspx");

   Main.aspx.cs中:int st_type = st_auth.ST_LoginType(Context.User.Identity.Name);

#9


你这种实现方式不就是Form吗?

孙悟空就以为自己能跳出如来的手掌呢

#10


楼主很聪明,孺子可教~

#11


我是说省却了 FormsAuthenticationTicket ticket = new FormsAuthenticationTicket( 
                    1, 
                    UserNameTextBox.Text,
                    DateTime.Now, 
                    DateTime.Now.AddMinutes(30), 
                    true, 
                    reader.GetString(0),
                    FormsAuthentication.FormsCookiePath);
                string hash = FormsAuthentication.Encrypt(ticket);
                HttpCookie cookie = new HttpCookie(
                    FormsAuthentication.FormsCookieName, 
                    hash);
和global.asax.cs中的代码设置,省不省略这一部分的区别主要体现在哪些方面?

#12


这部分加上去以后,可以实现基于角色的授权,前面的都是基于用户的单个授权。