文章作者 : linkfoxo [ webmaster@cfwindow.com ] Web URL : http://www.cfwindow.com
上载日期 : 2001-01-08
第四节: 捕捉目前用户在线信息: results.cfm.
借助于以上所说的基本概念,以下是原代码.
login.cfm文件和前面的一样, result.cfm, application.cfm 还有 page1.cfm 改变了不少.
我们建议你把前几节的代码再好好读一遍, 以便更好地了解以下的内容.
记住要是你需要调试的话, 请将下一节的代码一起下载下来调试. 没有application.cfm是不可以的.
results.cfm :
<CFSET Session.LoggedIn = FALSE>
<CFQUERY name="CheckUser" datasource="Database">
SELECT UserID, Password
FROM passwords
WHERE UserID = '#Form.UserID#'
</CFQUERY>
<!-- 看看用户是否在database中 -->
<CFIF CheckUser.RecordCount GREATER THAN 0>
<!--- 在次例子中大小写是不敏感的, 如果你需要, 可以用compare()来达到 --->
<CFIF CheckUser.PassWord IS Form.PassWord>
<!-- 看看 application structure 是否存在, 如果不是,建立一个 -->
<CFIF #IsDefined("application.UsersLoggedin")# IS False>
<CFSET application.UsersLoggedin=StructNew()>
</CFIF>
<CFSET UserIDAtDoor = CheckUser.UserID>
<!-- 看看是否有人用这个用户id登陆了? -->
<CFIF #StructKeyExists(application.UsersLoggedin, UserIDAtDoor)# IS True>
<!-- 如果是,我们看看他的登陆是否超时间了? -->
<CFSET EndTime = #application.UsersLoggedin[UserIDAtDoor].TimeCreated# + #AppTimeSpan#>
<CFIF #DateCompare("#Now()#", "#EndTime#")# IS 1>
<!-- 如果用户已经超时我们把他从structure中间删除, 然后给新的用户登陆让出地方 -->
<CFOUTPUT>
<CFSCRIPT>
StructDelete(application.UsersLoggedin, #CheckUser.UserID#, true);
</CFSCRIPT>
</CFOUTPUT>
<!-- These Session variables are used to control the login validity through
the application using the application.cfm -->
<CFSET Session.LoggedIn = TRUE>
<CFSET Session.UserID = CheckUser.UserID>
<!-- 我们将新用户加入到structure中来 -->
<CFSET application.UsersLoggedin["#session.UserID#"] = session>
<!-- 设置他的登陆时间, 以便算出下一次是否登陆超时 -->
<CFSET Application.UsersLoggedin["#Session.UserID#"].TimeCreated = Now()>
<CFELSE>
<!-- 假如用户还是没有退出, 就要重新登陆, 我们显示出错信息. -->
<CFOUTPUT>
<CFIF #DateDiff("n", "#Now()#", "#EndTime#")# LT 1>
<CFSET MinutesLeft = '少于1'>
<CFELSE>
<CFSET MinutesLeft = #DateDiff("n", "#Now()#", "#EndTime#")#>
</CFIF>
<CFSET Reason = ": \n\n1- 用户 #CheckUser.UserID# 已经登陆了.\n2
- 你上次没有正常退出 (比如.
你的计算机崩溃了). \n\n这个帐户要被锁定: #MinutesLeft# 分钟">
</CFOUTPUT>
</CFIF>
<!-- 如果没有测试任何用户登陆进来, 就给他一个身份-->
<CFELSE>
<!-- These Session variables are used to control the login validity
through the application using the application.cfm -->
<CFSET Session.LoggedIn = TRUE>
<CFSET Session.UserID = CheckUser.UserID>
<!-- We then add the current user session structure to the Application structure -->
<CFSET application.UsersLoggedin["#session.UserID#"] = session>
<!-- We add a time stamp to determinate the approximate timeout in case of an
unexpected departure of the user -->
<CFSET Application.UsersLoggedin["#Session.UserID#"].TimeCreated = Now()>
</CFIF>
<!-- 如果密码不对 -->
<CFELSE>
<CFSET Reason = "密码不对, 请重试">
</CFIF>
<!-- 如果用户不在数据库中 -->
<CFELSE>
<CFOUTPUT>
<CFSET Reason = '我们不能发现用户#Form.UserID#.'>
</CFOUTPUT>
</CFIF>
<!-- 如果验证通过, 我们将他带到下一新页 -->
<CFIF Session.LoggedIn>
<SCRIPT LANGUAGE="JavaScript">
self.location ='page1.cfm';
</SCRIPT>
<!-- 反之重新登陆. -->
<CFELSE>
<CFOUTPUT>
<SCRIPT>
alert("Sorry! Your login was unsuccessful because #Reason#");
self.location="login.cfm";
</SCRIPT>
</CFOUTPUT>
</CFIF>
下一节是: application.cfm ....
|