呵呵,并不是文不对题啦,他是教你用FORMS认证,算了,杂们先不看“一漂”的方法(别骂偶,呵喝) 我给你个SESSION的判断的登陆的离子看看哦看清楚哦,我是用VB。NET,你适当可以转换成你的C#,如果你是VB。NET的正好。。这是我的代码,你适当参考,修改修改就可以了!这样你应该就能看懂啦!login.aspx页面代码Public Class login Inherits System.Web.UI.Page#Region " Web 窗体设计器生成的代码 " '该调用是 Web 窗体设计器所必需的。 <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() End Sub Protected WithEvents admin_user As System.Web.UI.WebControls.TextBox Protected WithEvents RequiredFieldValidator1 As System.Web.UI.WebControls.RequiredFieldValidator Protected WithEvents admin_pass As System.Web.UI.WebControls.TextBox Protected WithEvents RequiredFieldValidator2 As System.Web.UI.WebControls.RequiredFieldValidator Protected WithEvents button1 As System.Web.UI.WebControls.Button Protected WithEvents button2 As System.Web.UI.WebControls.Button '注意: 以下占位符声明是 Web 窗体设计器所必需的。 '不要删除或移动它。 Private designerPlaceholderDeclaration As System.Object Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 'CODEGEN: 此方法调用是 Web 窗体设计器所必需的 '不要使用代码编辑器修改它。 InitializeComponent() End Sub#End Region Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '在此处放置初始化页的用户代码 End Sub Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button2.Click admin_user.Text = "" admin_pass.Text = "" End Sub Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click If admin_user.Text.Trim <> "" Or admin_pass.Text.Trim <> "" Then Dim conn As SqlClient.SqlConnection Dim cmd As SqlClient.SqlCommand Dim rs As SqlClient.SqlDataReader 'Dim count As Integer conn = New SqlClient.SqlConnection(ConfigurationSettings.AppSettings("shujuku")) cmd = New SqlClient.SqlCommand("select top 1 * from mn_admin where admin_name='" & admin_user.Text.Trim & "' and admin_pass='" & admin_pass.Text.Trim & "'", conn) conn.Open() rs = cmd.ExecuteReader If rs.Read Then Session("admin") = admin_user.Text.Trim Session("fage") = rs("fage") '权限字段 If Session("fage")="admin" Then Response.Write("<script>alert('恭喜您登陆成功!');location.href='admin_index.aspx';</script>") Else Response.Write("<script>alert('普通管理员不能进入超级管理页面');location.href='user_index.aspx';</script>") End If Else Response.Write("<script>alert('对不起登陆失败!');</script>") End If rs.Close() cmd.Dispose() conn.Close() conn.Dispose() Else Response.Write("<script>alert('请把信息填写完整!');</script>") End If End Sub End Class这样很清楚啦,呵呵,你看看,给分哦,西西!。-_-!
TO: kencock(寂寞农民) ,“在Protected.aspx中编写代码进行数据库验证方式”,这个验证已经由.net Framework通过web.config帮你做了。现在我的情况是验证没有问题,而是权限不够的用户我不好找地方控制。如果在每个页面的load事件中写代码控制的话,还是比较罗嗦的。
{
if(Session["Role"].ToString()!="Admin")
{
Response.Redirect("我指定的页");
}
}
catch
{
Response.Redirect("我指定的页");
}
<allow roles="Admin" />来判断的.难道要解析Web.config吗?有没有更好的办法呢?
<system.web>
<authorization>
<allow users="?" />
</authorization>
</system.web>
</location>
我给你个SESSION的判断的登陆的离子看看哦看清楚哦,我是用VB。NET,你适当可以转换成你的C#,如果你是VB。NET的正好。。这是我的代码,你适当参考,修改修改就可以了!这样你应该就能看懂啦!login.aspx页面代码Public Class login
Inherits System.Web.UI.Page#Region " Web 窗体设计器生成的代码 " '该调用是 Web 窗体设计器所必需的。
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() End Sub
Protected WithEvents admin_user As System.Web.UI.WebControls.TextBox
Protected WithEvents RequiredFieldValidator1 As System.Web.UI.WebControls.RequiredFieldValidator
Protected WithEvents admin_pass As System.Web.UI.WebControls.TextBox
Protected WithEvents RequiredFieldValidator2 As System.Web.UI.WebControls.RequiredFieldValidator
Protected WithEvents button1 As System.Web.UI.WebControls.Button
Protected WithEvents button2 As System.Web.UI.WebControls.Button '注意: 以下占位符声明是 Web 窗体设计器所必需的。
'不要删除或移动它。
Private designerPlaceholderDeclaration As System.Object Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
'不要使用代码编辑器修改它。
InitializeComponent()
End Sub#End Region Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此处放置初始化页的用户代码
End Sub Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button2.Click
admin_user.Text = ""
admin_pass.Text = ""
End Sub Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click If admin_user.Text.Trim <> "" Or admin_pass.Text.Trim <> "" Then
Dim conn As SqlClient.SqlConnection
Dim cmd As SqlClient.SqlCommand
Dim rs As SqlClient.SqlDataReader
'Dim count As Integer conn = New SqlClient.SqlConnection(ConfigurationSettings.AppSettings("shujuku"))
cmd = New SqlClient.SqlCommand("select top 1 * from mn_admin where admin_name='" & admin_user.Text.Trim & "' and admin_pass='" & admin_pass.Text.Trim & "'", conn)
conn.Open()
rs = cmd.ExecuteReader If rs.Read Then
Session("admin") = admin_user.Text.Trim
Session("fage") = rs("fage") '权限字段
If Session("fage")="admin" Then
Response.Write("<script>alert('恭喜您登陆成功!');location.href='admin_index.aspx';</script>")
Else
Response.Write("<script>alert('普通管理员不能进入超级管理页面');location.href='user_index.aspx';</script>")
End If
Else
Response.Write("<script>alert('对不起登陆失败!');</script>")
End If
rs.Close()
cmd.Dispose()
conn.Close()
conn.Dispose()
Else
Response.Write("<script>alert('请把信息填写完整!');</script>")
End If
End Sub
End Class这样很清楚啦,呵呵,你看看,给分哦,西西!。-_-!
TO:hackate 这里Session("fage")="admin",这个admin的角色就定得比较死了。
我的情况是这样:
有个sysMana(系统管理)文件夹,这里放的是系统管理的一些页面。在这个页面里允许角色为Admin、和DeptMana(超级管理员和部门经理)访问。在web.config里可以进行相应的设置,并且在Application_AuthenticateRequest事件中映射数据库中用户的角色和web.config里可以达到相应的效果(具体如何达到,我想各位大侠应该都了解,我就不赘叙了)。现在的情况是:如果登录的用户的角色不是Admin、DeptMana的话,他不是授权用户,那么她就会跳转到登录页。我是想达到如果是权限不够的用户,能让她重定向到指定页面,但权限的判断不要写死在代码中。
比如按hackate、seaonce(一块烂菜)的写法,如果权限比较多的话,那么我的if判断就很频繁了。
但bitsbird(一瓢 单身走我路)大侠的写法,我没看出来对这个问题有什么效果,可能是跟我刚接触asp.net有关,如果大侠能现身说法,感激之至。
TO ALL:
期盼大家能继续帮我找找解决方案。
首先把Protected.aspx整到一个另一个文件夹,以便与其它需要窗体验证的文件分开.
在Protected.aspx中编写代码进行数据库验证方式,在数据库开辟一个关于权限的字段,这样可以根据提交的表单数据和数据库进行验证,跟据反回的结果你就可以用IF随心所欲了.
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>然后,在后台,来判断用户身份:if (User.Identity.IsAuthenticated) //判断用户是否已经通过form认证
{
if (Session["quanxian"].ToString=="admin") //判断用户是否有管理员权限
{
合法用户....开始执行....
}
else
{
跳转权限不够页面
}
}
else
{
Response.Redirect("login.aspx?from="+Request.Url); //没有通过验证,跳转登录页面
}
在login.aspx里,用户登录成功后,向Session["quanxian"]中写入用户的权限,这样,无论哪个用户访问该页,都会先判断是否已登录,未登录则跳转登录,已登录则判断权限.
if (Session["quanxian"].ToString=="admin")
另,有没有哪位大侠知道怎么获得web.config中的
<authorization>
<allow roles="Admin, DeptMana" />roles的值呢?分不够可以再加。