用户身份验证
本节的任务是利用上节介绍的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即可。