實(shí)在受夠了原來cf的cookie session,安全性能差,與j2ee的session結(jié)合又很差,現(xiàn)在自己編寫了讀取j2ee session的tag,與jsp session完全結(jié)合:
自定義tag文件源文件:session.cfm
<cfparam name="Attributes.sessionManagement" type="string" default="yes"> <cfparam name="Attributes.sessionTimeout" type="numeric" default="0"> <cfif Attributes.sessionManagement is "yes"> <!--- 創(chuàng)建session對象 ---> <cfset session = getPageContext().getRequest().getSession()> <!--- 設(shè)置session過期時(shí)間,這個(gè)過程需要轉(zhuǎn)換整數(shù) ---> <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)> <!--- 設(shè)置session_MaxInactiveInterval變量值,這樣可以得到session的值是多長時(shí)間 (s)---> <cfset session.session_MaxInactiveInterval = timeout> <!--- 設(shè)置session_id的值 ---> <cfset session.session_id = session.getId()> <!--- 設(shè)置初始設(shè)置session的時(shí)間,即登陸時(shí)間 ---> <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())> <!--- 設(shè)置最新設(shè)置session的時(shí)間,即最后一次請求時(shí)間 ---> <cfset date.setTime(session.getLastAccessedTime())> <cfset session.session_lastAccessedTime = CreateDateTime(date.getYear() + 1900,date.getMonth() + 1,date.getDate(),date.getHours(),date.getMinutes(),date.getSeconds())> <!--- 設(shè)置session_isnew,是否是新建的session ---> <cfset session.session_isNew = session.isNew()> <!--- 將session對象傳遞到調(diào)用它的頁面上去 ---> <cfset Caller.session = session> </cfif>
代碼拷貝框
[Ctrl+A 全部選擇 然后拷貝]
將session.cfm保存到Customtags文件夾下面,然后在Application.cfm里面進(jìn)行調(diào)用:
<cf_session sessionManagement="yes" sessionTimeout="#CreateTimeSpan(0,0,30,0)#">
然后在整個(gè)應(yīng)用中就可以用session了,而且不會(huì)再有與j2ee結(jié)合的時(shí)候相互過期的現(xiàn)象,因?yàn)楝F(xiàn)在使用一個(gè)session了,不過注意,在jsp或servlet中session變量必須使用全部的大寫字母,否則cf不能讀出
出處:藍(lán)色理想
責(zé)任編輯:無意
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|