来源:天极网
问:如何在DW MX登录用户服务器行为中应用COOKIES保存用户名和密码?并且能让用户选择保存时间?
操作步骤:
1、新建asp页,保存为“UserDa.asp”。
插入表单、两个文本域、一个按扭和一个列表菜单。
对应项目如下:
| 表单对象 |
| 文本域 |
名称 |
| 用 户 名: |
uesr |
| 密码: |
pws |
| 列表菜单: |
tima |
| 列表表单 |
| 标签 |
值 |
| 不保存 |
0 |
| 保存一日 |
1 |
| 保存一月 |
2 |
| 保存半年 |
3 |
| 保存一年 |
4 |
页面样式如下:

2、插入登录用户服务器行为,测试一下,保证能正常登录。
3、切换到“代码”视图,在<!--#include file="Connections/new.asp" -->这句的下面输入以下代码段:
<%'以下代码为保存用户名和密码于cookies中
function ok()'定义函数,登录成功后,
'调用该函数将用户名和密码写入本地COOKIES中
select case request.form("tima")'判断语句,
'根据用户选择保存时间,设置本地COOKIES的过期时间
case 1
Response.Cookies("uesr").Expires=Date+1'设定COOKIES的过期时间,
'当Date+1时保存一天,Date+365时即保存一年,依此类推;若删除此句,
'则浏览器关闭后COOKIES失效
Response.Cookies("uesr")= request.form("uesr")
'创建一个名为“uesr”的本地COOKIES,并把用户名写入其中
Response.Cookies("pws").Expires=Date+1'保存一日
response.Cookies("pws")=request.form("pws")
case 2
Response.Cookies("uesr").Expires=Date+31'保存一月
Response.Cookies("uesr")= request.form("uesr")
Response.Cookies("pws").Expires=Date+31
response.Cookies("pws")=request.form("pws")
case 3
Response.Cookies("uesr").Expires=Date+182'保存半年
Response.Cookies("uesr")= request.form("uesr")
Response.Cookies("pws").Expires=Date+182
response.Cookies("pws")=request.form("pws")
case 4
Response.Cookies("uesr").Expires=Date+365'保存一年
Response.Cookies("uesr")= request.form("uesr")
Response.Cookies("pws").Expires=Date+365
response.Cookies("pws")=request.form("pws")
end select
end function'定义函数结束
%>
上面这段代码是自定义一个函数,函数名为ok(),用于将文本域信息写入本地COOKIES,下面通过函数名来调用它。
找到如下图所示代码(选中部分):
在这句代码下面输入函数名:“ok()”如下图(选中部
分):

这样,用户登录成功后,就把用户名和密码分别保存于本地COOKIES中了。为了用户下次登录时把COOKIES中的值读出来,在用户名和密码文本域中的初始值中中输入以下语句:
<%=request.cookies("uesr")%>
<%=request.cookies("pws")%>
如下图所示:


用户上次登录成功后用户名和密码自动保存于COOKIES中,再次登录时就把用户名和密码读出来,不用手工输入了。如下图所示:

上面的方法只利用了COOKIES保存信息,如果我要求当用户一次登录成功后,下次登录时只要请求登录页,就要自动登录了,如何做呢?
好的,继续做这个功能。
在“代码”视图中找到如下图所示代码(选中部分):

把Request.Form("pws")这句改为:
MM_valPws
如下图:

这是自定义的一个变量名,DW MX的原始代码没有这个语句,我们来定义和赋值给该变量,往下看。
找到如下图所示的代码(选中部分):

在这句代码的下面输入:
'手工添加代在此开始
if request.cookies("uesr")<>"" then'添加判断语句,检查本地COOKIES是否保存有数据
MM_valUsername=request.cookies("uesr")'读取COOKIES的uesr中的用户名并赋值给变量MM_valUsername
MM_valPws=request.cookies("pws")'读取COOKIES的uesr中的密码并赋值给量MM_valPws
else'若本地的COOKIES中没有保存有数据,则转为正常登录'用户须要手工输入用户名和密码才能登录
MM_valUsername=CStr(Request.Form("uesr"))
MM_valPws=Request.Form("pws")'这句为自己手工添加的变量,用于接收表单“密码”文本域的值,DW MX的原始代码中没有这个语句
end if
'手工添加代到此结束
添加位置如下(选中部分):

把上图的第51句“MM_valUsername=CStr(Request.Form("uesr"))”删除掉。
继续寻找以下代码(选中部分):

则是刚才添加进去的函数名,在其上下各添加一个判断语句,如下图:

这个判断语句的作用,如果用户上次登录时保存于COOKIES有值,则这次自动登录成功后就不用覆盖原来COOKIES的值。
好了,如果上次登录时已选择保存COOKES了,这次按“F12”就自动登录了,呵呵,多爽!
还有,如果我想在首页中自动登录,而不用请求登录页了,那又如何作呢???
我晕~~你的要求还真苛刻,非把我累死才甘心???好吧,俺尚存一点气息,再做你这个功能吧。
操作步骤:
1、打开你的index.asp页,在页面的最顶部即第一行输入以下语句:
<%if Session("MM_Username")="" and request.cookies("uesr")<>"" then
response.Redirect("UserDa.asp?us=ok")
end if
%>
这个语句的意思是,当阶段变量Session("MM_Username")的值为空和本地COOKIES有值时,自动转向登录页进行登录验证,代码中有一个us=ok的URL参数,这个用于转到登录页后,切换MM_redirectLoginSuccess="aa.asp"为MM_redirectLoginSuccess="index.asp"验证通过后又自动返回首页。
这里要注意的一个问题是,当用户第一次请求首页时自动登录由于页面往返转了两次,速度会有所下降。但登录后就不受影响了。
2、关于那个切换MM_redirectLoginSuccess="aa.asp"为MM_redirectLoginSuccess="index.asp"的语句,要在登录页中修改,打开登录页UserDa.asp,找到这句:

把它改成:
if Request.QueryString("us")="ok" then
MM_redirectLoginSuccess="index.asp"
else
MM_redirectLoginSuccess="aa.asp"
end if
如下图所示:

到此,有关于在DW MX的登录用户服务器行为中应用COOKIES的问题到解答完毕了,如果你还有其它疑问,欢迎你到本人的论坛或UDSKY论坛发贴获得技术支持。
下面是整页源代码,读者可根据注释理解:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!--#include file="Connections/new.asp" -->
<%'以下代码为保存用户名和密码于cookies中
function ok()'定义函数,登录成功后,
'调用该函数将用户名和密码写入本地COOKIES中
select case request.form("tima")'判断语句,
'根据用户选择保存时间,设置本地COOKIES的过期时间
case 1
Response.Cookies("uesr").Expires=Date+1'设定COOKIES的过期时间,
'当Date+1时保存一天,Date+365时即保存一年,依此类推;若删除此句,
'则浏览器关闭后COOKIES失效
Response.Cookies("uesr")= request.form("uesr")
Response.Cookies("pws").Expires=Date+1
response.Cookies("pws")=request.form("pws")
case 2
Response.Cookies("uesr").Expires=Date+31
Response.Cookies("uesr")= request.form("uesr")
Response.Cookies("pws").Expires=Date+31
response.Cookies("pws")=request.form("pws")
case 3
Response.Cookies("uesr").Expires=Date+182
Response.Cookies("uesr")= request.form("uesr")
Response.Cookies("pws").Expires=Date+182
response.Cookies("pws")=request.form("pws")
case 4
Response.Cookies("uesr").Expires=Date+365
Response.Cookies("uesr")= request.form("uesr")
Response.Cookies("pws").Expires=Date+365
response.Cookies("pws")=request.form("pws")
end select
end function'定义函数结束
%>
<%
' *** Validate request to log in to this site.
MM_LoginAction = Request.ServerVariables("URL")
If Request.QueryString<>"" Then MM_LoginAction = MM_LoginAction + "?" + Request.QueryString
'手工添加代在此开始
if request.cookies("uesr")<>"" then'添加判断语句,检查本地COOKIES是否保存有数据
MM_valUsername=request.cookies("uesr")'读取COOKIES的uesr中的用户名并赋值给变量MM_valUsername
MM_valPws=request.cookies("pws")'读取COOKIES的uesr中的密码并赋值给量MM_valPws
else'若本地的COOKIES中没有保存有数据,则转为正常登录'用户须要手工输入用户名和密码才能登录
MM_valUsername=CStr(Request.Form("uesr"))
MM_valPws=Request.Form("pws")'这句为自己手工添加的变量,用于接收表单“密码”文本域的值,DW MX的原始代码中没有这个语句
end if
'手工添加代码到此结束
If MM_valUsername <> "" Then
MM_fldUserAuthorization=""
if Request.QueryString("us")="ok" then
MM_redirectLoginSuccess="index.asp"
else
MM_redirectLoginSuccess="aa.asp"
end if
MM_redirectLoginFailed="no.asp"
MM_flag="ADODB.Recordset"
set MM_rsUser = Server.CreateObject(MM_flag)
MM_rsUser.ActiveConnection = MM_new_STRING
MM_rsUser.Source = "SELECT uesr, pws"
If MM_fldUserAuthorization <> "" Then MM_rsUser.Source = MM_rsUser.Source & "," & MM_fldUserAuthorization
MM_rsUser.Source = MM_rsUser.Source & " FROM use WHERE uesr='" & Replace(MM_valUsername,"'","''") &"' AND pws='" & Replace(MM_valPws,"'","''") & "'"
MM_rsUser.CursorType = 0
MM_rsUser.CursorLocation = 2
MM_rsUser.LockType = 3
MM_rsUser.Open
If Not MM_rsUser.EOF Or Not MM_rsUser.BOF Then
' username and password match - this is a valid user
Session("MM_Username") = MM_valUsername
if request.cookies("uesr")="" then
'这个语句的意思是,当自动登录成后,就不用覆盖原来COOKIES的值了
ok()'用户登录成功了,立即调用函数将用户名和密码信息写入本地COOKIES中
end if
If (MM_fldUserAuthorization <> "") Then
Session("MM_UserAuthorization") = CStr(MM_rsUser.Fields.Item(MM_fldUserAuthorization).Value)
Else
Session("MM_UserAuthorization") = ""
End If
if CStr(Request.QueryString("accessdenied")) <> "" And false Then
MM_redirectLoginSuccess = Request.QueryString("accessdenied")
End If
MM_rsUser.Close
Response.Redirect(MM_redirectLoginSuccess)
End If
MM_rsUser.Close
Response.Redirect(MM_redirectLoginFailed)
End If
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>登录用户COOKIES的应用</title>
</head>
<body>
<form name="form1" method="POST" action="<%=MM_LoginAction%>">
<p>
<input name="uesr" type="text" id="uesr" value="<%=request.cookies("uesr")%>">
<select name="tima" id="tima">
<option value="0">不保存</option>
<option value="1">保存一日</option>
<option value="2">保存一月</option>
<option value="3">保存半年</option>
<option value="4">保存一年</option>
</select>
</p>
<p>
<input name="pws" type="password" id="pws" value="<%=request.cookies("pws")%>">
<input type="submit" name="Submit" value=" 登录 ">
</p>
</form>
</body>
</html>
以上是登录页的源代码,出于安全考虑,有必要做一个注销页,当用户退出时,提问用户是否删除本地COOKIES。
注销页源代码:文件名为“Withdraw.asp”
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<%
Session.Contents.Remove("MM_Username")
Session.Contents.Remove("MM_UserAuthorization")
Session.Contents.Remove("Webmaster")
%>
<%if request("DeleteCookies")="yes" and request.cookies("uesr")<>"" then
response.cookies("uesr")=""
response.cookies("pws")=""
response.cookies("tame")="0"
txt="cookies删除成功!"
elseif request("DeleteCookies")="yes" and request.cookies("uesr")="" then
txt="对不起!你本地的cookies并没有保存用户名和密码信息。</p>"&_
"<p><a href='Withdraw.asp?DeleteCookies=yes'>删除cookies</a>"
else
txt="谢谢光临,你已成功退出论坛,是否删除本地cookies保存的用户名和密码信息?</p>"&_
"<p><a href='Withdraw.asp?DeleteCookies=yes'>删除cookies</a>"
end if
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>退出成功!</title>
<meta http-equiv="refresh" content="10;URL=index.asp">
</head>
<body topMargin=0 onLoad="MM_showHideLayers('Layer1','','hide')">
<!--#include file="inc/title.asp" -->
<p> </p><table width="75%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td align="center">
<p><%=txt%> </p><p>请<a href="index.asp">返回</a></p></td>
</tr>
</table>
</body>
</html>
那个页面须要注销用户时,链接到这个页即可。