web後台擷取不到session中的值(loading sessions from persistent storage),後改用JS傳值

來源:互聯網
上載者:User

標籤:

線上的程式似乎從session中取不到domain資料,重啟了一下tomcat查看log日誌發現,居然有報錯。錯誤資訊如下

 

22-Sep-2016 00:52:16.562 SEVERE [localhost-startStop-1] org.apache.catalina.session.StandardManager.startInternal Exception loading sessions from persistent storagejava.io.StreamCorruptedException: invalid type code: 00at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1381)at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2018)at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:503)at java.lang.Throwable.readObject(Throwable.java:914)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1058)at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1909)at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1808)at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)at org.apache.catalina.session.StandardSession.doReadObject(StandardSession.java:1602)at org.apache.catalina.session.StandardSession.readObjectData(StandardSession.java:1090)at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:218)at org.apache.catalina.session.StandardManager.load(StandardManager.java:162)at org.apache.catalina.session.StandardManager.startInternal(StandardManager.java:356)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5320)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725)at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:940)at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1816)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)at java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:745)

 下面從網上找到的資料:

Tomcat/work/Catalina/localhost/工程名/SESSIONS.ser session未逾時的情況下伺服器關閉大的時候被序列化為工程名/SESSIONS.ser 啟動的時候再載入進來,載入的時候報錯了,把該檔案刪除,重新啟動。

通過該問題,知道了requet.getSession()擷取的是StandardSession對象,StandardManager管理Session集合時,在Servlet容器關閉的時候,StandardManager會調用unload方法把Session集中的StandardSession對象寫到"SESSIONS.ser"檔案中,因為直接kill掉了Servlet容器進程,沒有unload持久化,所以在恢複Session的時候報錯。所以以後要注意調用Servlet容器的start和stop命令。

 

 

雖然我這樣做了,重啟tomcat沒有報錯,但是我的session中仍然擷取不到值。

於是修改程式,我在伺服器後台列印出session的ID發現頁面每次下拉請求到的session的ID都不一樣(但是在本地測試時session ID 是一樣的,我使用的是$.get(url)的形式訪問的伺服器,這個每次訪問會產生新的session嗎?暫時沒有測試)。

由於項目需要儘快上線,在前台JS寫了一個方法使用者擷取到地址欄中的參數,方法如下

url: http://www.baidu.com/domain/?domain=taobao.com
function GetQueryString(name){ var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); if(r!=null)return unescape(r[2]); return null;} var domain = ""; var myurl=GetQueryString("domain"); if(myurl !=null && myurl.toString().length>1){ domain = GetQueryString("domain"); }
//這裡就可以擷取到taobao.com

 

web後台擷取不到session中的值(loading sessions from persistent storage),後改用JS傳值

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.