將你的 session 資料存放在 window.name 裡
一直以來我都以為在 javascript 裡沒有 `session` 這種東西. 所有的變數, 函式等等的資料在頁面重新載入時都會被清空, 直到了我發現這個 Craig Buckler 寫的 javascript session library.
來看一下它的原始碼
/**
* Implements cookie-less JavaScript session variables
* v1.0
*
* By Craig Buckler, Optimalworks.net
*
*/
if (JSON && JSON.stringify && JSON.parse) var Session = Session || (function() {
// cache window 物件
var win = window.top || window;
// 將資料都存入 window.name 這個 property
var store = (win.name ? JSON.parse(win.name) : {});
// 將要存入的資料轉成 json 格式
function Save() {
win.name = JSON.stringify(store);
};
// 在頁面 unload 的時候將資料存入 window.name
if (window.addEventListener) window.addEventListener("unload", Save, false);
else if (window.attachEvent) window.attachEvent("onunload", Save);
else window.onunload = Save;
// public methods
return {
// 設定一個 session 變數
set: function(name, value) {
store[name] = value;
},
// 列出指定的 session 資料
get: function(name) {
return (store[name] ? store[name] : undefined);
},
// 清除資料 ( session )
clear: function() { store = {}; },
// 列出所有存入的資料
dump: function() { return JSON.stringify(store); }
};
})();
使用方法
// 存入一個 session value/object Session.set(name, object); // 取出一個 session value/object Session.get(name); // 清除所有 session 資料 Session.clear(); // 列出所有 session 資料 Session.dump();
基本上它的作法是把你所有設定的 session 變數轉成了 json 字串然後存入 `window.name` 這個 property 裡. 而 `window.name` 這個 property 在頁面跳出時是不會被清除的, 真是一個非常聰明的作法阿!!
這裡有另一個類似的 javascript session library 叫做 `sessvars` , 它提供了更多的使用方法, 如果你有更進階對 javascript session 的應用也可以看一下.
Demo
這裡有一個 Craig Buckler 所寫的 demo.




