【问题标题】:ColdFusion: When to define session variables?ColdFusion:何时定义会话变量?
【发布时间】:2011-05-15 05:04:32
【问题描述】:

当用户请求页面时,是否为该用户启动会话?据我所知,一旦您发出页面请求,会话就会开始......

如果是这种情况,您何时创建会话变量?即用户名、密码、偏好等...随时?

【问题讨论】:

    标签: session coldfusion session-variables coldfusion-9


    【解决方案1】:

    是的,用户的会话范围是在第一次请求时设置的。但是,这取决于您何时想要设置各种标志和值。不过,您可能不想将密码放在会话范围内。

    我喜欢做的是将用户特定的值放入用户结构中。因此,在请求开始时,我会检查变量并设置它是否不存在。比如……

    <cfif not structkeyexists(session, "user")>
        <cfset session.user = {
            authorized = false
            , admin = false
            , username = ''
            , accountid = ''
            <!--- etc --->
        } />
    </cfif>
    

    当用户登录时,您可以填写适当的值并设置 session.user.authorized = true

    当用户注销时,这种方法的好处是您可以删除用户结构。

    <cfset structdelete(session, "user") />
    

    然后在下一页将再次检查用户结构,如果它不存在则创建。

    【讨论】:

    • 哦,我非常喜欢这种方法,丹。在 PHP 中,除非您明确告诉它开始,否则会话不会开始。这就是我的困惑所在。但是为什么不将结构创建放在应用程序启动或会话启动中呢?
    • 这里的想法是,从技术上讲,一个会话可以由多个人共享。如果一个人坐在浏览器前,使用它,登录,注销等等......然后另一个人坐下来并开始在同一个会话下的 ColdFusion 中使用它。 OnSessionStart 在这种情况下只会发生一次,而不是两次。因此,如果用户结构不存在,则无论是否正在启动过度拱形会话,您都希望重新创建用户结构。
    【解决方案2】:

    配置和使用会话变量的基础是explained here

    会话基本上是客户端和应用程序之间的逻辑关系,因此会话变量可从客户端向您的应用程序发出的第一个请求中获得,并且会话通常使用唯一标识会话的 cookie 跨请求保持,尽管这可以也可以通过在 url 中传递标识符来完成。请注意您的会话超时设置,例如,您可能希望为未设置 cookie 的机器人/爬虫提供更短的超时时间,因此将为每个页面请求启动一个新会话 (more details on this)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      • 2021-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多