2017-04-02 46 views
-1

我對Coldfusion中的會話和客戶端管理有些疑問。會話如何在Coldfusion中工作?

注意:當在URL中提供CFID和CFTOKEN時,行爲如下所示:如果會話存在,則忽略URL中的CFID和CFTOKEN。如果會話不存在,則使用URL中的CFID和CFTOKEN來驗證會話,並在會話有效時使用該會話。如果會話無效,則創建新的會話。 CFID和CFTOKEN被重新生成。

這是adobe ColdFusion online documentation的一個聲明。下面是我的問題

  1. 如果會話沒有CFID和CFTOKEN的幫助,因爲在第一個句子中存在的ColdFusion如何檢查?
  2. 假設我們使用ColdFusion會話管理,如果CFTOKEN和CFID在登錄後沒有改變,我們可以劫持會話嗎?
+0

請務必閱讀有關[鎖定指南](http://wwwimages.adobe)中有關ColdFusion會話和cookie的建議。 COM /內容/大壩/ ACOM/EN /產品/ ColdFusion的/ PDF文件/ ColdFusion的-2016-鎖定-指南.pdf)。 –

回答

1

ColdFusion通過檢查cookie範圍中是否存在CFID和CFTOKEN來檢查有效會話。如果存在CFID和CFTOKEN cookie,它將使用cookie值來嘗試和驗證會話。如果它不能使用cookie值驗證會話,它將使用URL值來嘗試和驗證會話。

+0

如果我的理解正確,那麼文檔在禁用cookie時會說明這種情況。所以_如果會話存在,URL中的CFID和CFTOKEN將被忽略。這一行讓我感到困惑。如果沒有cookies,ColdFusion如何檢查會話是否存在? – Vineesh

+0

ACF使用CFID/TOKEN或者JSESSIONID(通過CF管理設置的JEE會話)來維護會話狀態。沒有這些變量,ACF就無法保持會話狀態。你有鏈接到讓你感到困惑的特定文檔嗎? –

+0

https://helpx.adobe.com/coldfusion/developing-applications/developing-cfml-applications/using-persistent-data-and-locking/managing-the-client-state.html - 在此「使用客戶端和會話變量沒有cookie「本節 – Vineesh

0

Using client and session variables without cookies

這是用戶能夠在他們的瀏覽器禁用cookie。在這種情況下,ColdFusion無法自動維護客戶端狀態。通過在應用程序頁面之間傳遞客戶端標識信息,您可以使用客戶端或會話變量而不使用Cookie。然而,這種技術有顯著的限制,具體如下:

  1. 客戶端變量實際上是相同的會話變量,但他們留下無法使用的數據在客戶端數據存儲。 因爲客戶端的系統沒有保留任何標識信息,所以下次用戶登錄時,ColdFusion無法識別以前客戶端的用戶,並且必須爲該用戶創建新的客戶端ID。來自前一個會話的有關用戶的任何信息都不可用,但在ColdFusion刪除它之前,它仍保留在客戶端數據存儲中。如果您清除ColdFusion管理員的「保留未訪問客戶端的清除數據」選項,則ColdFusion永不刪除此數據。 因此,如果您允許用戶禁用cookie,請勿使用客戶端變量。要在沒有cookie的情況下保留客戶信息,要求用戶使用唯一的ID登錄。然後,您可以將用戶特定的信息以用戶的ID作爲密鑰保存在數據庫中。

  2. 每次用戶在瀏覽器中直接請求頁面時,ColdFusion都會創建一個新會話,因爲新請求不包含指示會話或客戶端的狀態信息。

注意:您可以通過設置的Application.cfc或This.setClientCookies變量cfapplication標籤的setClientCookies屬性

要使用的ColdFusion的ColdFusion防止從客戶端發送信息到瀏覽器餅乾會話變量而不使用cookie,每個頁面必須將CFID和CFToken值傳遞給它作爲請求URL一部分調用的任何頁面。如果頁面包含任何HTML hrefa = links,cflocation標籤,表單標籤或cfform標籤,則標籤必須傳遞標籤URL中的CFID和CFToken值。要使用J2EE會話管理,請在頁面請求中傳遞jsessionid值。要使用ColdFusion客戶端變量和J2EE會話變量,請在URL中傳遞CFID,CFToken和jsessionid值。

注意:當在URL中提供CFID和CFTOKEN時,行爲如下所示:如果會話存在,則會忽略URL中的CFID和CFTOKEN。如果會話不存在,則使用URL中的CFID和CFTOKEN來驗證會話,並在會話有效時使用該會話。如果會話無效,則創建新的會話。 CFID和CFTOKEN被重新生成。

的ColdFusion提供URLSessionFormat功能,執行以下操作:

如果客戶不接受Cookie,會自動將所有需要的客戶識別信息的URL。

如果客戶端接受cookie,不會附加信息。 URLSessionFormat函數自動確定需要哪些標識符,並只發送所需的信息。它還提供了一種更加安全可靠的方法來支持客戶端標識,而不是手動編碼每個URL中的信息,因爲它僅發送所需的信息,並且在需要時發送,而且更容易編碼。

要使用URLSessionFormat函數,請在函數中包含請求URL。例如,下面的CFFORM標籤帖到另一頁的請求併發送客戶身份識別,如果必要的話:

<cfform method="Post" action="#URLSessionFormat("MyActionPage.cfm")#> 

如果使用在多個URLSessionFormat功能在同一個頁面的網址,你可以得到一個小的性能改進和簡化例如:

<cfset myEncodedURL=URLSessionFormat(MyActionPage.cfm)> 
<cfform method="Post" action="#myEncodedURL#"> 
+0

我不同意這個回答的第一句話。儘管人們可能會禁用cookie,但我懷疑這種情況發生的頻率比人們想象的要少。 –

+0

@DanBracuk我同意這一點。 –