【问题标题】:Session timeout after 15 minutes15 分钟后会话超时
【发布时间】:2014-05-28 10:10:53
【问题描述】:
在我的应用程序中,我使用 Web 服务来获取所需的信息。要实际使用此服务,您必须首先登录,获取令牌 - 加密密码,然后将此令牌附加到 SOAP 请求以识别当前用户。问题是,当您 15 分钟不使用服务时,您的令牌会更改,并且当您尝试从服务器获取另一组信息时,它会拒绝旧令牌。结果应用程序没有获得所需的信息并引发大量错误。
令牌更改后如何将用户(加载Login.axm)发送到登录页面?
【问题讨论】:
标签:
session
mobile
timeout
oracle-adf
【解决方案1】:
谢谢你,Shay Shmeltzer 的回答。
我是如何解决这个问题的:
1) 首先,我阅读了会话在我的特定情况下是如何工作的。我使用了无状态会话,这意味着 -
为初始请求打开一个新会话并且会话保持不变
为后续请求开放。自动重新登录
(对用户透明)如果会话关闭。用户名令牌和
PasswordText 必须作为 SOAP 标头包含在初始请求中
打开无状态会话。
无状态会话管理是用于高负载的最佳方法
Web 服务应用程序。使用无状态模式,应用程序
只提供一次用户名和密码,即初始
要求。在服务器上打开一个会话并专用于此
用户。
在 Siebel 业务应用程序返回 SessionToken 的响应中,
这是一个包含有关信息的加密字符串
用户名、密码和时间戳。对于后续请求
应用程序必须使用 SessionToken 才能重用会话。
出于安全原因,会为每个响应重新生成 SessionToken。
应用程序必须提供最后收到的 SessionToken
下一个请求。
SessionToken-Siebel 会话映射在 Siebel Web 中维护
服务器扩展(SWSE);基于 SWSE 发送的 SessionToken 值
对正确 Siebel 会话(任务)的请求。
虽然会话是持久的,但每个会话都会进行身份验证
请求(SWSE 从
会话令牌)。
主要问题是:
注意:重新连接或再次自动登录仅在以下情况下才会发生
令牌尚未超时。如果超时,则用户必须
再次手动登录。令牌超时时间必须大于或等于
会话超时。有关会话令牌超时的更多信息,请参阅
会话和会话令牌超时相关参数。
在我的例子中,标准会话令牌的存活时间是 15 分钟。
这就是我在代码中包含计数器并在每次请求之前检查它的原因。如果计数器时间 > 15 分钟,我向服务器发送登录请求以获取新的会话令牌。原因,我没有在计数器超过 15 分钟后立即将当前页面更改为登录页面是:放置在代码中,我检查计数器是否已由绑定启动以获得渲染它所需的值,所以如果你的令牌有expired 你会得到一堆错误。这就是为什么我首先更新会话发送登录请求,获取活动会话令牌并将其放入绑定请求的最后一个请求中。应用程序在无任何错误的情况下呈现页面后,会弹出“会话已过期”消息并进入登录页面。