这篇文章是转载的!

本文讨论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 清除不活动的用户历史会话信息

清除历史会话记录,通过请求清除
首先添加Apps for the Web Manager职责,进入后提交 清除无效会话请求,

手动清除 ,在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.
————————————————

原文链接:https://blog.csdn.net/zzzjjjfaff/article/details/79884173

发表回复

您的电子邮箱地址不会被公开。

评论(1)