Javascript session

將你的 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.

參考


Related posts