用户身份验证

 

本节的任务是利用上节介绍的Cookie知识,设计一个身份验证功能。

 

这个系统有五个页面,分别是登录页面logon.htm,退出登录页面exit.htm,以及首页default.htm,还有两个普通页面order.htm和product.htm.
 

这是登录页面logon.htm:

 

 

这是登录成功后的首页default.htm:

 

 

如果用户身份验证失败,会重新进入登录页面,并有错误提示:

 

 

 

设计要求:

 

1、当用户第一次访问时,不管访问任何页面,都会自动跳转到登录页面logon.htm,要求输入账户名和密码 。

2、等用户身份验证通过后,自动跳转到首页default.htm,并可访问任何其他页面。
3、
如果用户身份验证失败,会重新进入登录页面logon.htm,并有错误提示。
4、在首页单击"退出登录",可以清除当前的登录状态,重新进入登录页面。

 

HttpRequest事件代码:

Dim
sb As New StringBuilder
Dim
Verified As Boolean
Dim
UserName As String
= e.Cookies("username") 'cookie中获取用户名
Dim
Password As String
= e.Cookies("password") 'cookie中获取用户密码
'如果在登录页面输入了用户名和密码后单击确定按钮
If
e.Path = "logon.htm" AndAlso e.PostValues.ContainsKey("username") AndAlso e.PostValues.ContainsKey("password"Then

    UserName = e.PostValues("username")
    Password = e.PostValues("password")

End
If
'
验证用户身份
If
UserName = "张三" AndAlso Password = "888" Then
    Verified  =
True

ElseIf
Username = "李四" AndAlso Password="999" Then
    Verified  =
True

End
If
If
Verified AndAlso e.Path = "logon.htm"  Then '如果用户访问的是登录页,且身份验证成功
    e.Appendcookie("username",UserName)
'
将用户名和密码写入cookie

    e.Appendcookie("password",Password)

    e.WriteString("<meta http-equiv='Refresh' content='0; url=/default.htm'>")
'
直接跳转到首页
    Return
'
必须的
ElseIf
Verified = False AndAlso e.Path <> "logon.htm" Then '如果用户身份验证失败,且访问的不是登录页面
    e.WriteString("<meta http-equiv='Refresh' content='0; url=/logon.htm'>")
'
那么直接跳转到登录页面
    Return
'
必须的
End
If
Select
Case e.path
    Case
"logon.htm"

        sb.AppendLine("<form action='logon.htm' enctype='multipart/form-data' method='post' id='form1'  name='form1'>")

        If e.PostValues.ContainsKey("username") AndAlso e.PostValues.ContainsKey("password"Then
'
判断是否是验证失败后的重新登录
            sb.AppendLine(
"
用户名或密码错误!</br></br>")
            sb.AppendLine(
"
户名: <input name='username' id='username' value='" & UserName & "''><br/><br/>")
            sb.AppendLine(
"
密码: <input type='password' name='password' id='password' value ='" & Password & "'><br/><br/>")
       
Else
            sb.AppendLine(
"
户名: <input name='username' id='username'><br/><br/>")
            sb.AppendLine(
"
密码: <input type='password' name='password' id='password'><br/><br/>")
        End
If
        sb.AppendLine(
"<input type='submit' name='sumbit' id='sumbit' value='
登录'>")
        sb.AppendLine(
"<input type='reset' name='reset' id='reset' value='
重置'>")

        sb.AppendLine("</form>")
        e.WriteString(sb.ToString)

    Case
"exit.htm"
        e.Appendcookie("username", "")
'
清除cookie中原来的用户名和密码

        e.
Appendcookie("password", "")
        e.WriteString("<meta http-equiv='refresh' content='0; url=/logon.htm'>")
'
跳转到登录页
    Case "",
"default.htm"
        sb.AppendLine(
"
这是首页<br/><br/>")
        sb.AppendLine(
"<a href='order.htm'>
订购产品<a><br/>")
        sb.AppendLine(
"<a href='product.htm'>
产品列表<a><br/>")
        sb.AppendLine(
"<a href='exit.htm'>
退出登录<a><br/>")

        e.WriteString(sb.Tostring)

    Case
"order.htm"
       
e.WriteString("这是订购页")
    Case
"product.htm"

        e.WriteString("这是产品页")

End
Select


代码逻辑并不复杂,所有知识之前都已经讲述过,唯一没有接触过的是自动跳转网页的代码:

 

<meta http-equiv='refresh' content='2; url=/logon.htm'>

 

表示2秒后跳转到"/logon.htm"页面,如果你要立即跳转,将2改为0即可。

 


本页地址:http://www.foxtable.com/mobilehelp/topics/0041.htm