EBS登錄會話原理解析

         本文討論EBS會話管理,特別是如何使用數據庫表APPLSYS.FND_LOGINS和ICX.ICX_SESSIONS管理用戶登錄和會話。本文中的具體內容適用於EBS R12.1.1。

  讓我們看看當用戶(比如OPERATIONS)第一次在瀏覽器中出現EBS登錄頁面時會發生什麼,比如說IE8。

1. EBS服務器生成一個新的會話,該會話尚未存儲在數據庫中,並且

加密版本的會話ID將通過帶有密鑰名稱JSESSIONID的cookie傳回瀏覽器。HTTP響應標題看起來像,

設置Cookie:

JSESSIONID = a7eb1fe1f559b459516815325503b8a1d6e0b575789f1351f1b687abe32bb383.e34Lbh8OahqOai0MbN0La3mOb3r0;路徑= / OA_HTML

瀏覽器使用此JSESSIONID進行與EBS服務器的進一步交互。如果您監控您的機器和EBS服務器之間的HTTP流量,您可以很容易地看到這一點。

2.當OPERATIONS用戶提供證書時,瀏覽器

首先向EBS服務器發送POST請求以及從服務器獲取的Cookie信息。在服務器端,首先在FND_LOGINS表中創建一條數據。你可以通過SQL查詢來查找FND_LOGINS表中的行。

SELECT USER_ID,USER_NAME FROM FND_USER WHERE USER_NAME ='OPERATIONS';

FND_LOGINS表具有USER_ID列。現在,您可以使用從上面的查詢中獲得的USER_ID進行以下查詢

SELECT * FROM FND_LOGINS WHERE USER_ID = 1318 ORDER BY START_TIME DESC;

與標識用戶的USER_ID一起,FND_LOGINS表具有以下重要列,例如LOGIN_ID,START_TIME和END_TIME。LOGIN_ID是自動生成的唯一。可能有許多LOGIN_ID與一個USER_ID相關聯。即使同一用戶使用兩個瀏覽器實例從同一臺計算機登錄到EBS服務器,也會在FND_LOGINS表中生成兩行,每行都有不同的LOGIN_ID 。START_TIME是用戶登錄時的時間,END_TIME僅在用戶明確從應用程序。

接下來是ICX_SESSIONS表中的行。ICX_SESSIONS和FND_LOGINS表由列LOGIN_ID關聯。當用戶打開EBS登錄頁面時,ICX_SESSIONS具有會話ID,其加密版本由EBS服務器首先發出。

當用戶從應用程序註銷,JSESSIONID作爲Cookie的一部分傳回給服務器,EBS從ICX_SESSIONS表中相應的行得到LOGIN_ID,更新FND_LOGINS表的END_TIME 這基本上意味着會話已終止。

3.用戶OPERATIONS從應用程序註銷並再次啓動登錄頁面,而不清除瀏覽器會話cookie緩存,這是用戶通常所做的事情,broswer確實發送了EBS服務器JSESSIONID,雖然已經有了,但EBS會終止與會話關聯的這個JSESSIONID併產生一個新的會話ID,如上面2所討論的。

4.在解釋了這個簡單的用例之後,讓我們討論一個場景,其中多個登錄是由同一臺機器和同一瀏覽器創建的。假設您在IE8中打開兩個選項卡,並在其中啓動EBS登錄頁面,並使用OPERATIONS / welcome登錄到一個選項卡,然後使用SYSADMIN / welcome登錄。請注意,由於瀏覽器會話緩存由這兩個選項卡共享,因此兩個登錄都使用相同的JSESSIONID。所以當第二個用戶SYSADMIN /welcone登錄時,EBS服務器從系統註銷OPERATIONS用戶。在兩個用戶都登錄後,請參閱表FND_LOGINS的內容。對於第二個用戶SYSADMIN(USER_ID爲0),START_TIME與用戶操作(OPERATIONS 的USER_ID爲1318)的END_TIME相同。

LOGIN_ID USER_ID START_TIME END_TIME

---------------------

5514220 0 20-SEP-2010 22:48:11(null)

5514219 1318 20-SEP-2010 22:47:59 20-SEP-2010 22:48:11

---------------------

5.現在讓我們看看管理會話超時的EBS中的參數。

“ICX:會話超時”(ICX:Session Timeout')配置文件選項確定在禁用會話之前用戶會話中不活動的時間長度(以分鐘爲單位)。請注意,禁用並不意味着終止或殺死。用戶有機會重新驗證並重新啓用其超時會話。如果重新驗證成功,則禁用的會話將重新啓用並且不會丟失任何工作。否則,會話將被終止而不保存待處理的工作。

'ICX:限時'(ICX: Limit Time配置文件選項定義連接的最大連接時間(以小時爲單位),無論用戶有沒有活動。如果'ICX:會話超時'設置爲NULL,那麼會話將持續與'ICX:限制時間'一樣長的時間,無論用戶有沒有活動

在我們的R12.1.1安裝中,這兩個配置文件選項的值分別爲30和999。建議值分別爲30分鐘和4小時。表ICX_SESSION有兩列TIME_OUT和LIMIT_TIME,其中爲每個會話存儲這些值。

6.關於IE8的說明。

爲了使基於表單的應用程序能夠與IE8一起使用,您需要禁用與跨站點腳本(XSS)相關的安全設置。首先,您需要將EBS應用程序服務器添加到IE中的受信任站點,因爲我們確實希望IE8 XSS篩選器可用於常規Internet瀏覽。

  • 在IE8中選擇工具 - > Internet選項 - >安全(選項卡) - >可信站點
  • 單擊站點,然後鍵入運行R12的服務器的主機名,並將該網站添加到受信任的站點列表中。
  • 仍然在安全標籤中點擊自定義級別按鈕,找到'啓用XSS過濾器'設置並將其值設置爲'禁用' 

7. 如何查詢ebs的在線用戶數

SELECT U.USER_NAME,
       APP.APPLICATION_SHORT_NAME,
       FAT.APPLICATION_NAME,
       FR.RESPONSIBILITY_KEY,
       FRT.RESPONSIBILITY_NAME,
       FFF.FUNCTION_NAME,
       FFT.USER_FUNCTION_NAME,
       ICX.FUNCTION_TYPE,
       ICX.FIRST_CONNECT,
       ICX.LAST_CONNECT
  FROM ICX_SESSIONS          ICX,
       FND_USER              U,
       FND_APPLICATION       APP,
       FND_APPLICATION_TL    FAT,
       FND_RESPONSIBILITY    FR,
       FND_RESPONSIBILITY_TL FRT,
       FND_FORM_FUNCTIONS    FFF,
       FND_FORM_FUNCTIONS_TL FFT
 WHERE 1 = 1
   AND U.USER_ID = ICX.USER_ID
   AND ICX.RESPONSIBILITY_APPLICATION_ID = APP.APPLICATION_ID
   AND FAT.APPLICATION_ID = ICX.RESPONSIBILITY_APPLICATION_ID
   AND FAT.LANGUAGE = 'ZHS'
   AND FR.APPLICATION_ID = ICX.RESPONSIBILITY_APPLICATION_ID
   AND FR.RESPONSIBILITY_ID = ICX.RESPONSIBILITY_ID
   AND FRT.LANGUAGE = 'ZHS'
   AND FRT.APPLICATION_ID = ICX.RESPONSIBILITY_APPLICATION_ID
   AND FRT.RESPONSIBILITY_ID = ICX.RESPONSIBILITY_ID
   AND FFF.FUNCTION_ID = ICX.FUNCTION_ID
   AND FFT.FUNCTION_ID = ICX.FUNCTION_ID
   AND ICX.DISABLED_FLAG != 'Y'
   AND ICX.PSEUDO_FLAG = 'N'
   AND (ICX.LAST_CONNECT +
       DECODE(FND_PROFILE.VALUE('ICX_SESSION_TIMEOUT'),
               NULL,
               ICX.LIMIT_TIME,
               0,
               ICX.LIMIT_TIME,
               FND_PROFILE.VALUE('ICX_SESSION_TIMEOUT') / 60) / 24) >
       SYSDATE

   AND ICX.COUNTER < ICX.LIMIT_CONNECTS;

8.通過上面的介紹,可以知道在用戶登錄和退出時會更新 icx_sessions 和fnd_logins表,但是在用戶進行職責切換時也會更新icx_sessions表,隨着系統使用時間的增加,這就好導致,有時切換職責時會出現比較慢的情況。此時就要清理icx_sessions表數據了。具體可以參考http://knoworacleappsdba.blogspot.sg/2016/05/purge-inactive-sessions-running-from.html

9 清除不活動的用戶歷史會話信息

   1)清除歷史會話記錄,通過請求清除

         首先添加Apps for the Web Manager職責,進入後提交     清除無效會話請求,

   2) 手動清除,在apps 服務器執行 $FND_TOP/sql/FNDDLTMP.sql腳本。注意 如果系統長時間沒有清理,裏面數據會很多此時執行腳本會卡死。也可以手動刪除表數據,之後在執行腳本或提交請求

       手動刪除的表有

      delete icx_sessions
where (nvl(disabled_flag,'N') = 'Y')
or (nvl(disabled_flag,'N') = 'N' and
(last_connect + 1 + nvl(limit_time,4)/24 <sysdate));

delete icx_session_attributes
where session_id not in (select session_id from icx_sessions);

delete icx_transactions
where session_id not in (select session_id from icx_sessions);

delete icx_text
where session_id not in (select session_id from icx_sessions);

delete icx_context_results_temp
where datestamp < sysdate - 1/24;

-- deleting unsuccesful log information after 30 days.
delete icx_failures
where creation_date < SYSDATE - 30;

delete fnd_session_values

where ICX_SESSION_ID not in (select session_id from icx_sessions);

刪除完數據後,記得執行表mover 降低高水位線,重建index

alter table icx.icx_sessions move;

alter index icx.ICX_SESSIONS_N1 rebuild;

alter index icx.ICX_SESSIONS_U1 rebuild;

alter index icx.ICX_SESSIONS_U2 rebuild;

其它表執行同樣操作

10 清除用戶登錄歷史記錄信息

  1)提交請求清除   

    用系統管理員職責提交請求   清除登錄審計數據   參數 日期是刪除的截至日期

 2)手動清除,在apps 服務器執行 $FND_TOP/sql/FNDSCPRG.sql腳本,也可以查看腳本手動刪除表

    最後記得執行表fnd_logins的  mover操作 降低高水位線,重建index.



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章