當用戶請求一個頁面時,是否爲該用戶啓動了一個會話?從我所知道的情況來看,只要您發出頁面請求,會話就會開始...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