文章作者 : linkfoxo [ webmaster@cfwindow.com ] Web URL : http://www.cfwindow.com
上载日期 : 2001-01-09
第四节: 捕捉目前用户在线信息: application.cfm.
application.cfm :
<CFAPPLICATION
Name="MyApplication"
SESSIONMANAGEMENT="Yes"
SESSIONTIMEOUT="#CreateTimeSpan(0,0,45,0)#"
APPLICATIONTIMEOUT="#CreateTimeSpan(0,0,45,0)#">
<CFPARAM name="session.LoggedIn" DEFAULT="FALSE">
<!-- 定义多长时间算是超时,我们这里定义45分钟 -->
<CFSET AppTimeSpan = #CreateTimeSpan(0,0,45,0)#>
<!-- 如果用户没有login -->
<CFIF #session.LoggedIn# IS "FALSE">
<!-- ... 而且也不在登陆页面, 和找回丢失密码的页面. -->
<CFIF (CGI.SCRIPT_NAME IS NOT "/test/login.cfm")
AND (CGI.SCRIPT_NAME IS NOT "/test/results.cfm")
AND (CGI.SCRIPT_NAME IS NOT "/test/forgotpass.cfm")>
<SCRIPT LANGUAGE="JavaScript">
alert("The system has detected an invalid login
or your session on this machine has timed out.
You will be prompted for your login/password again.");
self.location.href='login.cfm';
</SCRIPT>
</CFIF>
<CFELSE>
<!-- this will reset the time stamp every time the user accesses a non-login related page,
to keep track of his activity. -->
<CFIF (CGI.SCRIPT_NAME IS NOT "/test/login.cfm")
AND (CGI.SCRIPT_NAME IS NOT "/test/results.cfm")
AND (CGI.SCRIPT_NAME IS NOT "/test/forgotpass.cfm")>
<CFSET Application.UsersLoggedin["#Session.UserID#"].TimeCreated = Now()>
</CFIF>
</CFIF>
Page1.cfm : 显示谁在线?
<HTML>
<HEAD>
<TITLE>My Application Page one</TITLE>
<!-- 很重要,防止cache..cfheaders anti cache-->
<CFHEADER NAME="Expires" VALUE="Mon, 06 Jan 1990 00:00:01 GMT">
<CFHEADER NAME="Pragma" VALUE="no-cache">
<CFHEADER NAME="cache-control" VALUE="no-cache">
<!-- 和上面的一起使用, 一个管服务器, 一个管浏览器.-->
<META HTTP-EQUIV="Expires" CONTENT="Mon, 06 Jan 1990 00:00:01 GMT">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
</HEAD>
<BODY>
<H2>Welcome to page one!</H2>
<BR>
If you can see this file, it means you are logged in. <A HREF="logout.cfm">LOGOUT</A>
<BR><BR>
<FONT SIZE="2">
<B>Application Variables output:</B> <BR><BR>
<CFLOOP COLLECTION=#application.UsersLoggedin# ITEM="counter">
<CFOUTPUT>
<I>Session variables as recorded in the application structure for UserID #counter#</I><BR>
</CFOUTPUT>
<UL>
<CFLOOP COLLECTION=#application.UsersLoggedin[counter]# ITEM="counter2">
<CFOUTPUT>
<LI>#counter2# (Value - #application.UsersLoggedin[counter][counter2]#)
</CFOUTPUT>
</CFLOOP>
</UL>
<BLOCKQUOTE>
<CFOUTPUT>
Created at: #DateFormat("#application.UsersLoggedin[counter].TimeCreated#")#
#TimeFormat("#application.UsersLoggedin[counter].TimeCreated#")#<BR>
<CFSET EndTime = #application.UsersLoggedin[counter].TimeCreated# + #AppTimeSpan#>
Will end at: #DateFormat("#EndTime#")# #TimeFormat("#EndTime#")#<BR>
That is: #DateDiff("n", "#Now()#", "#EndTime#")# minutes from now
</CFOUTPUT>
</BLOCKQUOTE>
</CFLOOP>
<BR><BR>
<B>Current User session Variables output:</B> <BR><BR>
<BLOCKQUOTE>
<CFLOOP COLLECTION=#session# ITEM="counter">
<CFOUTPUT>
#counter# (Value - #session[counter]#)<BR>
</CFOUTPUT>
</CFLOOP>
<BR>
<CFOUTPUT>
Created at: #DateFormat("#session.TimeCreated#")#
#TimeFormat("#session.TimeCreated#")#<BR>
<CFSET EndTime = #session.TimeCreated# + #AppTimeSpan#>
Will end at: #DateFormat("#EndTime#")# #TimeFormat("#EndTime#")#<BR>
That is: #DateDiff("n", "#Now()#", "#EndTime#")# minutes from now
</CFOUTPUT>
</BLOCKQUOTE>
<BR>
</FONT>
</BODY>
</HTML>
多找几个机器测试测试, 不要在一台机器上, 因为cfid的原因, 你很难测试超时的功能.
待续....: Logout.cfm 和总结
|