很有趣的一件事,每當許久沒去寫程式,往往在撰寫的過程中,就會出現一些奇怪的問題
這次遇到這個問題 The script tried to execute a method or access a property
在PHP使用session 及物件上遇到的,看了網路上一堆文章說
這是因為程式某些操作產生Incomplete Object(__PHP_Incomplete_Class),並且呼叫了此物件的函式。產生Incomplete Object的原因是序列化的資料轉回原始物件時,該物件的類別並未被定義
原以為物件放入session要先序列化,但印象中以前沒有做過呀~,後來瞭解後,其實問題很簡單
就是你從session取出時,你要操作這物件,但你並未先宣告這個物件過,意思就是~忘了include 這物件宣告
就是這麼容易,但這問題也花了不少時間去懷疑自己的邏輯….^^||
參考連結:http://emn178.pixnet.net/blog/post/87731583-%E8%A7%A3%E6%B1%BAthe-script-tried-to-execute-a-method-or-access-a-prope
好幾年前寫過線上人數,當初用JSP寫 似乎 沒遇到多大的問題
最近,碰到需要檢測帳號只能同時一個在線上,才遇到了一些問題
一般有了問題才會深入,才更瞭解session的監控原理及模式
唉~~這就是所謂的半調子呀!
Session表示使用者連到系統的請求暫存記錄,每個使用者(瀏覽器)連至系統時,系統會自動給予一組Session ID去辨別這個使用者
而有些連結的資訊就會透過這組session id保留在主機,以便使用者連線使用。
在java Servlet實作session時,可透過監聽session 建立及結束當被觸發時以進行初始化及還原的動作
只要implements HttpSessionListener並實作 sessionCreated 及 sessionDestroyed method即可
或是可以針對session傳出傳入值時進行監聽,如此一來即可在傳入的時候(即使用用HttpSession的setAttribute方法時)
以及移除的時候(即使用用HttpSession的removeAttribute方法或session time out時)觸發valueBound和valueUnbound方法
只要在傳入的object implements HttpSessionBindingListener 並實作valueBound和valueUnbound 即可
這樣就可以在上述提到的時機點觸發相關的方法
因此,我們就可以利用上述特性進行客戶的日誌記錄或上線人數的統計等
而再一提的,如果要做到上線人數的統計或是像我這次記錄使用者只能一組在線上
就還要再使用一個全域的system session,在JSP是叫application (顧名思義就是整個WEB應用系統都可以使用的session)
而在Servlet,可以從session或request 取出ServletContext
(這個等同於jsp的application,有關ServletContext的敘述請參考Servlet規範),
如此就可以利用ServletContext的全局特性,去記錄和整個系統有關的資訊了!!
參考資料:Servlet中如何捕獲Session事件–MaYong – 希賽IT博客,中國最大的IT專業博客
近期留言