一個很簡單的session及cookie幾乎花上了我快一天的時間當然要特別寫下來紀念一下…^^||
有一定網頁開發經驗的人都應該知道,網頁使用session時,一般在關閉瀏覽器後再重啟,因為session ID不同所以就算失效了,但目前發現android預設的原生瀏覽器(採用webkit引擎)在關閉瀏覽器後再重啟,原session 還是存在,但在iphone上用safair就和電腦上的情況是一樣。
後來改用cookie設定max-age 的有效期(expire) 為session就是關閉瀏覽器後也會自己失效,沒想到也是一樣的情況,最後確認當手機重新啟動後再試同樣的流程,session及cookie(效期是session)的就會都失效了
以上測試的手機android版本為2.3.7 , 4.x ,有motorola的defy,samsung的S2,HTC z710e,SONY的xperia z都是一樣的結果。
所以結論是在android原生瀏覽器上,可能是為了方便還是覺得手機是個人化的用品,所以當離開瀏覽器後並不會讓sessoin scope的session & cookie失效,但其它瀏覽器,例如:dolphin(海豚),chrome,opera,Firefox等就都不會這樣…
最後,當然session等超過server可接受的時間(一般是預設30分鐘),還是會失效的,因為Server上已經沒有保留你的session ID,拿原本的session ID當然沒有用了;不過cooike就不會啦~因為原生瀏覽器會把你當做還是在當次使用的。
似乎這樣的資訊,在網路上好像沒啥人寫,希望上述資訊可以讓有同樣困擾的人不要和我白白花費這麼多時間在測試~XD
最近的網誌都是在解決錯誤訊息,有點像擦屁股大隊長了
這次要排除的是 java.io.CharConversionException: Not an ISO 8859-1 這個問題
在servlet output stream,時發生的,會出現以下錯誤訊息
description The server encountered an internal error () that prevented it from fulfilling this request. exception java.io.CharConversionException: Not an ISO 8859-1 character: 中 javax.servlet.ServletOutputStream.print(ServletOutputStream.java:89) javax.servlet.ServletOutputStream.println(ServletOutputStream.java:242) mypack.HelloWorldExample1.doGet(HelloWorldExample1.java:43) javax.servlet.http.HttpServlet.service(HttpServlet.java:690) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:122) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:196)
上網查了一下才知,原本寫法是直接使用output stream ,就像
ServletOutputStream out = res.getOutputStream();
res.println(line);
怎麼轉碼都不行(但在Tomcat 4時是OK的,Tomcat 6之後就都會出錯),但如果改用OutputStreamWriter ,先定義好寫出的編碼就可以正常了,使用方式如下:ServletOutputStream stream= res.getOutputStream();
OutputStreamWriter out = new OutputStreamWriter(stream,"UTF-8");
out.write(line);
但要注意,這個物件沒有println可用,所以如要斷行符號可要自己加上去喔!
參考資源: http://www.taixinglife.com/blog-138-89.html
剛好有需要用到,這種找GOOGLE比自己看函式庫來的快
這篇寫的蠻好的,直接使用即可上手
php中要取得目前網址要用字串組合的方式
$_SERVER[‘HTTP_HOST’] //網址
$_SERVER[‘REQUEST_URI’] //包含參數(包含目錄)
$_SERVER[‘PHP_SELF’] //只有檔案名稱(包含目錄)
$_SERVER[QUERY_STRING] //只取後面參數
以 http://www.gocar.idv.tw/phpbb3/viewforum.php?f=1 網址為例
$_SERVER['HTTP_HOST'] : www.gocar.idv.tw
$_SERVER['REQUEST_URI'] :/phpbb3/viewforum.php?f=1
$_SERVER['PHP_SELF'] : /phpbb3/viewforum.php
$_SERVER[QUERY_STRING] : f=1
所以
$ThisURL = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
echo $ThisURL ;
會得到
http://www.gocar.idv.tw/phpbb3/viewforum.php?f=1
$ThisFile = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
echo $ThisFile ;
會得到
http://www.gocar.idv.tw/phpbb3/viewforum.php
還有順帶一提,如果需要知道參考連結可以利用以下語法即可取得到
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
參考來源:
- http://www.gocar.idv.tw/phpbb3/viewtopic.php?f=9&t=21
- http://www.electrictoolbox.com/php-http-referer-variable
很有趣的一件事,每當許久沒去寫程式,往往在撰寫的過程中,就會出現一些奇怪的問題
這次遇到這個問題 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
很怪的問題又發生了,明明先前安裝系統時設定都很正常
但這次就是遇到了
Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent
去查了一下說要在使用session前要先session_start(),印象中系統裡使用session時都有先寫session_start
不管如何,有一個快速的解決方案,就是改php.ini就OK啦
找到session.auto_start 參數
預設應該為0 只要改成1 即可排除這問題
近期留言