2015-06-04 48 views
0

我正在開發一個應用程序。在CF10中。已經決定這個應用程序。將通過在網絡應用程序中創建的鏈接打開。 用戶通過點網絡應用程序登錄&以查看鏈接。當用戶點擊該鏈接時,他們可以訪問CF應用程序。如何重置會話變量

該鏈接通過用戶ID,我使用這個用戶ID在的Application.cfc在onSessionStart創建session.userid :

<cfset session.userid = #Trim(URL.userid)#> 

的問題是,當我註銷並重新登錄作爲一個不同的用戶,我以前的session.userid仍然存在。所以,我有兩個不同的session.userids 爲了避免這種情況,我想我可以做到以下幾點:

在onSessionStart在的Application.cfc,我開始sessionIvalidate功能:

<cfset sessionInvalidate() /> 
    <cfset session.userid = #Trim(URL.userid)#> 

我想每一次應用程序啓動application.cfc ColdFsuion必須通過application.cfc運行,然後sessionInvalidate函數將清除現有的session.userid,然後創建一個新的,如果我以同一臺計算機的不同用戶身份登錄和註銷,那麼應用程序仍然維護一個session.userid。 但不幸的是,這種方法不起作用!我仍然會在新會話未創建時獲得較舊的會話!

如果我不能用這個邏輯來做,最好的方法是什麼? 我應該重新設置session.userid index.cfm嗎?

+2

*當用戶點擊該鏈接時,他們可以訪問CF應用程序*與您的問題無關,但我希望CF登錄過程涉及的不僅僅是存在簡單的URL變量。否則,任何用戶都可以通過修改URL來爲鏈接添加書籤並在他們希望的任何ID下登錄。 – Leigh

回答

1

onApplicationStart()只在運行應用程序的第一次運行。作爲註銷過程的一部分,您應該運行sessionInvalidate()。如果運行正確,那麼不應該有以前的用戶標識定義的ColdFusion會話變量。

您絕對不需要在onSessionStart()的頂部運行它。該函數完成它命名的操作:「在新會話開始時運行這些進程」。

瞭解更多in the CF 10 docs

您可以結束這樣的會話:

<cfset StructClear(Session)>

或類似這樣的,如果你正在使用J2EE會話:

<cfset getPageContext().getSession().invalidate()>

雖然,我敢肯定,第一個例子是基本上就是sessionInvalidate()確實。

此外,這個應用程序只能通過您的內部網絡訪問?那麼只有你公司的人可以訪問它?如果沒有,您需要考慮實施更強大的單一登錄流程,以橋接來自其他網站的訪問。

+0

如果您不介意,請允許我提出兩個問題,第一個問題是,我們是否仍在使用cflock創建會話,因爲我發現很多博客,例如來自Ray Camden的博客就是其中之一。它表示在CFMX cflock會話之後不再需要。我現在很困惑。第二個問題是我如何知道我是否使用J2EE會話?有沒有辦法檢查? – user3779216

+0

CFLOCK可能不需要。如果您在CF管理員中打開它們,只會使用J2EE會話。 –

+0

好的,謝謝!順便說一句,這是一個內部網站,用戶在我們的機構內。 – user3779216

1

隨着我的註銷序列我運行2個單獨的會議驅逐艦。這樣我知道會話被銷燬了。

<cfset structClear(session) /> 
<cfset sessionInvalidate()/> 

我正在運行CF11,當我的客戶退出我的web應用程序時,這種方式非常有效。

至於CFLOCK,取決於你的CF版本將取決於你是否使用它。它在CF11中貶值,當我去CF11時,它已經破壞了我的申請。