2015-05-14 24 views
5

我的應用中的會話變量有問題。簡而言之,我的coldfusion應用程序在使用iFrame的dot net應用程序中。主要應用程序使用點網,所以用戶登錄到網點應用程序。 一旦用戶成功登錄,他們可以訪問我的coldfusion應用程序。通過鏈接。所以沒有登錄到我的coldfusion應用程序。 (老闆不希望我們的用戶登錄兩次!)。當我更改其他會話變量時,是否需要刪除Coldfusion中的cookie

爲了區分每個用戶,dot net app將兩個url變量url.userid和urlusergroup傳遞給我的coldfusion應用程序。然後,我根據這些url變量(如session.userid和session.usergroup)創建會話變量,以便在我的coldfusion應用程序中漫遊時區分每個用戶及其角色。 這是我如何創建會話: 在我的Application.cfc(ColdFusion的10)OnSessionStart我:

<cfset session.userid= url.userid> 
<cfset session.usergroup= url.usergroup> 

如果我登錄爲用戶A,創建了這兩個會議,然後當我註銷(通過點網應用程序),然後以用戶B再次登錄,爲用戶B創建另一組會話,但屬於用戶A的會話變量仍然存在。這搞砸了一切。

要只維持1臺同時運行的會話,我做的,我index.cfm如下:

<CFIF StructKeyExists(session,"userid") > 
     <cfif session.usergroup NEQ URL.usergroup AND session.userid NEQ url.userid> 
     <cfset sessionInvalidate() /> 
     <cfset session.userid = url.userid> 
     <cfset session.usergroup = url.usergroup> 
     </cfif> 
    </CFIF 

這項工作,我可以登錄和註銷爲不同的用戶提供不同的角色和訪問完美但是我注意到的一件事仍然保持不變就是cookie。 當我cfdump var =「#cookie#」我看到相同jsessionid = C2AEE274A09334EB98CCB2D332D6CADA.cfusion

我的問題是:我應該做一些與cookie?我是否也應該讓它過期併爲每個新用戶重新構建cookie,就像我在會話中所做的一樣? 如何刪除一個cookie以及如何爲用戶重建一個?

+0

我個人不會擔心cookie。我假設你網絡上的用戶都有不同的電腦。如果是這種情況,他們的cookies不會被共享。所以如果用戶A註銷,然後10分鐘後他們重新登錄,他們仍然會有相同的cookie。但用戶B可以登錄下一個,因爲她在不同的PC上,她的cookie會有所不同。只有當用戶共享PC時,您才能看到cookie之間保持一致的時間。但即使在這種情況下,您的會話刪除代碼應該照顧它。 –

回答

1

不是你正在尋找的答案,但在我看來,你可能會有一個更大的問題 - 是否有任何URL參數數字或'純文本'?如果是這樣,任何用戶都可以看到通過iframe傳遞的URL參數,所以可以輕鬆更改用戶標識和/或用戶組,這大概會讓他們訪問他們不應該訪問的內容。

例如,如果IFRAME呼籲:通過與PARAMS我可能會登錄爲不同的用戶篡改 http://mycfapp.com/?userid=123&usergroup=2

然後: http://mycfapp.com/?userid=1&usergroup=2

你需要考慮如何保護這些。您可以讓.net應用程序調用CF服務器端進行身份驗證並獲取您可以在iframe中傳遞的令牌。這樣,您可以提供一個時間敏感的令牌,而用戶不會看到作爲簡單URL參數傳遞的id。

當用戶註銷以使令牌無效時,您也可以讓.NET應用程序調用CF。

+0

你能提供一個例子,我如何讓.net應用程序調用coldfusion服務器端進行身份驗證?截至目前,我只有1個鏈接在.net端傳遞這些URL參數,如下所示:https://myside.com/index.cfm?usergroup=SA&user_id=0035755594。我知道這是不好的,我在閱讀你的回覆後進行了測試,並且有人可以在沒有通過.net應用登錄的情況下使用它。 – Rbt

+0

我以爲會發生。我建議你考慮使用類似OAuth的應用程序對用戶進行身份驗證。您可能想問任何後續問題,因爲這是一個很大的問題,因此您可能會提出新的問題。祝你好運! –

1

根據John的說法進行擴展,您需要從.net應用程序撥打兩個電話。

首先將用於驗證來自.net系統的呼叫。作爲迴應,你應該給回一個令牌。您可以將此令牌保存到您的會話或數據庫中,並對照userId。

然後使用該標記,您應該允許。net應用程序用戶能夠訪問您的ColdFusion應用程序。您可以根據用戶旅程在該令牌上設置超時。

相關問題