15分钟后会话超时



在我的应用程序中,我使用web服务来获取所需的信息。要实际使用此服务,您必须首先登录,获得令牌加密的密码,然后将此令牌附加到SOAP请求以标识当前用户。问题是,当你15分钟不使用服务时,你的令牌会改变,当你试图从服务器获取另一堆信息时,它会拒绝旧的令牌。因此,应用程序无法获得所需的信息,并抛出一堆错误。

当令牌已更改时,如何发送用户(加载Login.axm)到登录页面?

谢谢Shay Shmeltzer的回答。

如何解决这个问题:

1)首先,我阅读了在我的特殊情况下会话是如何工作的。我使用无状态会话,这意味着-

为初始请求打开一个新的会话,并且会话保持不变为后续请求打开。自动重新登录(对用户透明),如果会话关闭。UsernameToken,PasswordText必须作为SOAP头包含在初始请求中打开无状态会话。

无状态会话管理是用于高负载的最佳方法Web服务应用程序。使用无状态模式,应用程序只提供一次用户名和密码,即用于初始化请求。会话在服务器上打开,并专门用于此用户。

在响应Siebel Business Applications返回SessionToken,哪个是包含关于信息的加密字符串用户名、密码和时间戳。对于后续的请求,应用程序必须使用SessionToken来重用会话。

出于安全原因,为每个响应重新生成sessiontoken。应用程序必须提供最后接收到的SessionToken下一个请求。

SessionToken-Siebel会话映射在Siebel Web中维护服务器扩展(SWSE);基于SWSE发送的SessionToken值将请求发送到正确的Siebel会话(任务)。

尽管会话是持久的,但每个会话都要进行身份验证请求(SWSE)从用户名和密码中解密SessionToken)。

主要问题是:

注意:只有在以下情况下才会重新连接或自动登录令牌没有超时。如果超时,则用户必须手动重新登录。令牌超时必须大于或等于会话超时。有关会话令牌超时的详细信息,请参见会话和会话令牌超时相关参数。

在我的例子中,

标准会话令牌的实时时间是15分钟。

这就是为什么我在代码中包含计数器并在每个请求之前检查它。如果计数器时间> 15分钟,我向服务器发送登录请求以获取新的会话令牌。在计数器超过15分钟后,我没有将当前页面更改为直接登录页面的原因是:放置在代码中,我检查计数器已经由绑定启动以获得所需的值来呈现它,所以如果您的令牌已经过期,您将获得一堆错误。这就是为什么我首先更新发送登录请求的会话,获得活动会话令牌并将其放入通过绑定请求的最后一个请求中。app渲染页面无错误后,弹出"Session已过期"提示,进入登录页面。

您可以通过编程方式设置从ADF Mobile发送到soap服务的soap头- http://docs.oracle.com/cd/E37975_01/doc.111240/e24475/amxwebservices.htm#CHDIBIIE

最新更新