当用户请求一个页面时,是否为该用户启动了一个会话?从我所知道的情况来看,只要您发出页面请求,会话就会开始...ColdFusion:何时定义会话变量?
如果是这种情况,您何时创建会话变量?即用户名,密码,偏好等......随时都有?
当用户请求一个页面时,是否为该用户启动了一个会话?从我所知道的情况来看,只要您发出页面请求,会话就会开始...ColdFusion:何时定义会话变量?
如果是这种情况,您何时创建会话变量?即用户名,密码,偏好等......随时都有?
是的用户的会话范围是在第一个请求上设置的。但是,这取决于您希望何时设置各种标志和值的偏好。不过,您可能不想将密码放在会话范围中。
我喜欢做的是把用户特定的值放在用户结构中。所以请求开始我会检查变量并设置它是否不存在。例如...
<cfif not structkeyexists(session, "user")>
<cfset session.user = {
authorized = false
, admin = false
, username = ''
, accountid = ''
<!--- etc --->
} />
</cfif>
当您的用户登录就可以填入相应的值并设置session.user.authorized =真
当用户登出广告最棒的这种做法是你可以删除用户结构。
<cfset structdelete(session, "user") />
然后在下一页上再次检查用户结构,如果它不存在则创建。
配置和使用会话变量的基础知识是explained here。
会话基本上是客户端和应用程序之间的逻辑关系,所以会话变量可从客户端的第一个请求到达您的应用程序,并且会话通常使用cookie来持久化请求,该cookie使用唯一标识会话的cookie,尽管这也可以通过在URL中传递标识符来完成。值得关注会话超时设置,例如,您可能希望为僵尸网络/抓取工具提供更短的超时时间,因为它们不会设置cookie,因此会为每个页面请求(more details on this)启动一个新的会话。
哦,我很喜欢这个方法,Dan。在PHP中,直到你明确地告诉它开始,会话才会启动。这就是我混淆的地方。但为什么不把结构创建放在应用程序的开始或会话开始之内? – dcolumbus 2011-05-18 00:41:17
这里的想法是,一个会话在技术上可以由多人共享。如果一个人坐在浏览器上,使用它,登录,注销等等,然后另一个人坐下来,并开始在ColdFusion中使用它,它们都在同一个会话下。 OnSessionStart只会在这种情况下发生一次,而不是两次。因此,如果用户结构不存在,则无论是否启动超级拱形会话,都要重新创建用户结构。 – 2011-05-18 12:49:31