【问题标题】:Check if Session still exists检查会话是否仍然存在
【发布时间】:2012-12-09 15:19:58
【问题描述】:

登录时,coldfusion 服务器分配给我一个CFID 和一个CFTOKEN。稍后使用CFIDCFTOKEN 如何检查我的会话是否仍然存在。

换句话说,我想要一个函数,它将接受 CFIDCFTOKEN 并判断与 CFIDCFTOKEN 相关的会话是否仍然存在。

谢谢

【问题讨论】:

  • 你能指定你想要达到的更高目标吗?这可能会给你更多的答案。
  • 从移动应用程序我想向服务器发送一个调用以检查我的会话是否仍然存在。如果没有,我会将用户发送到登录屏幕。
  • 仅在用户登录时将自定义会话变量Session.HasUserLogedIn 设置为true。每次从移动应用程序向服务器发出请求时,您需要检查该变量是否具有true 的值,如果是,则服务器用户,如果不是,则她的会话已过期;将她重定向到登录屏幕。我在这里有什么遗漏吗?
  • 和@chris-blackwell 确实为你写了一个功能示例:-)

标签: coldfusion coldfusion-9 coldfusion-8 coldfusion-10


【解决方案1】:

实现此目的的最简单方法是在用户登录时在会话中设置一个标志。

例如

<cfset session.loggedin = true />

那么当你想检查用户是否仍然有一个有效的会话时,你可以这样做

<cfparam name="session.loggedin" default="false" />
<cfif NOT session.loggedin>
  <!--- do something here --->
</cfif>

【讨论】:

  • 是的,这是最简单的方法。但我期待会有一个适当的方法。例如冷融合功能等。
  • 除非有人以正确的方式发布,否则我会接受您的回答。谢谢
  • 这才是正确的方法,真的。你可以做StructKeyExists(session,'anyvaluethatshouldexist'),但这和克里斯上面做的一样
  • 我自己会选择strettkeyexists选项。
  • Chris 的建议是检查它的正确方法。 CFIDCFTOKEN 都作为 cookie 存储在客户端。你不能仅仅依靠他们来认证用户。你应该通过服务器端以某种方式检查它。
【解决方案2】:

Chris 的回答没有任何问题,通常是检查会话时的标准规范。

这两个 cookie 旨在将您的浏览器与您的会话“链接”,而不是实际维护该会话(事实上,我相信这些 cookie 设置为在 30 年后到期(?),如果您是如果我没记错的话,使用J2EE session management)。来自docs

要使用客户端和会话变量,ColdFusion 必须能够 识别客户。它通常通过设置以下两个来实现 客户端系统上的 cookie 值:

CFID:顺序客户端标识符

CFToken: 随机数客户端安全令牌 这些 cookie 唯一地标识客户端以 ColdFusion,它还维护变量的副本作为 Session 和 Client 范围。

正如您所读到的 here,Ben Nadel 玩弄了一些 CFIDCFTOKEN,其中 CF 使用相同的 CFIDCFTOKEN cookie 在过期后创建新会话。

至于您的“ColdFusion Proper”方式,您可以考虑使用 CFLOGINother security tags 来帮助处理身份验证,但我不相信很多人使用它,因为正如 Chris 演示的那样,维护会话非常容易。

【讨论】:

    猜你喜欢
    • 2014-05-02
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 2020-03-07
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    相关资源
    最近更新 更多