实在受够了原来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不能读出
出处:蓝色理想
责任编辑:无意
◎进入论坛网络编程版块参加讨论
|