打印本文 打印本文 关闭窗口 关闭窗口
Coldfusion:使用j2ee的session
作者:武汉SEO闵涛  文章来源:敏韬网  点击数916  更新时间:2009/4/23 10:31:42  文章录入:mintao  责任编辑:mintao

  实在受够了原来cf的cookie session,安全性能差,与j2ee的session结合又很差,现在自己编写了读取j2ee session的tag,与jsp session完全结合:

自定义tag文件源文件:session.cfm

<cfparam name="Attributes.sessionManagement" type="string" default="yes">
<cfparam name="Attributes.sessionTimeout" type="numeric" default="0">
<cfif Attributes.sessionManagement is "yes">
<!--- 创建session对象 --->
<cfset session = getPageContext().getRequest().getSession()>
<!--- 设置session过期时间,这个过程需要转换整数 --->
<cfif Attributes.sessionTimeout eq 0>
<cftry>
<cfset timeout = session.getMaxInactiveInterval()>
<cfcatch type="any">
<cfset timeout = CreateTimeSpan(0,0,30,0)>
<cfset timeout = round(timeout * 24 * 3600)>
</cfcatch>
</cftry>
<cfelse>
<cfset timeout = round(Attributes.sessionTimeout * 24 * 3600)>
</cfif>
<cfobject action="connect" class="java.lang.Integer" type="java" name="cfint">
<cfset timeout = cfint.parseInt(toString(timeout))>
<cfset session.setMaxInactiveInterval(timeout)>
<!--- 设置session_MaxInactiveInterval变量值,这样可以得到session的值是多长时间 (s)--->
<cfset session.session_MaxInactiveInterval = timeout>
<!--- 设置session_id的值 --->
<cfset session.session_id = session.getId()>
<!--- 设置初始设置session的时间,即登陆时间 --->
<cfobject action="create" class="java.util.Date" type="java" name="date">
<cfset date.setTime(session.getCreationTime())>
<cfset session.session_creationTime = CreateDateTime(date.getYear() + 1900,date.getMonth() + 1,date.getDate(),date.getHours(),date.getMinutes(),date.getSeconds())>
<!--- 设置最新设置session的时间,即最后一次请求时间 --->
<cfset date.setTime(session.getLastAccessedTime())>
<cfset session.session_lastAccessedTime = CreateDateTime(date.getYear() + 1900,date.getMonth() + 1,date.getDate(),date.getHours(),date.getMinutes(),date.getSeconds())>
<!--- 设置session_isnew,是否是新建的session --->
<cfset session.session_isNew = session.isNew()>
<!--- 将session对象传递到调用它的页面上去 --->
<cfset Caller.session = session>
</cfif>

代码拷贝框

[Ctrl+A 全部选择 然后拷贝]

将session.cfm保存到Customtags文件夹下面,然后在Application.cfm里面进行调用:

<cf_session sessionManagement="yes" sessionTimeout="#CreateTimeSpan(0,0,30,0)#">

  然后在整个应用中就可以用session了,而且不会再有与j2ee结合的时候相互过期的现象,因为现在使用一个session了,不过注意,在jsp或servlet中session变量必须使用全部的大写字母,否则cf不能读出

打印本文 打印本文 关闭窗口 关闭窗口