;中国 COLD FUSION 用户组; WWW.CFWINDOW.COM 
您的位置 :首页 >> CF 技巧文章 >> 阅读文章内容 [ 关闭窗口 ]      

技巧文章内容 
    做一个功能完备的登录系统(连载4/6)-----捕捉目前用户在线信息: result.cfm
文章作者 : 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  ....







< 联系我们 --- 中国Cold Fusion用户组>

CFUG 国内(总部):Linkfoxo    上海:CFANS    北京:Cafe,Cyberkid,liwater    沈阳:Wangking
  
哈尔滨:Baiming    浙江:梅盛松    江西:陈末
  
CFUG (国际) Nagoya(名古屋):Codeguru    新加坡:YUZI    新西兰(Auckland):Richard CHEN
Copyright 2000-2001 www.cfwindow.com.All rights reserved

;中国 COLD FUSION 用户组; WWW.CFWINDOW.COM