<!--#include file = "conn.asp"--> <SCRIPT LANGUAGE=jscript RUNAT=Server> /********************************************************** * Author: David * blog: http://blog.iyi.cn/david * Email: davidnick@126.com * QQ: 76522970 ***********************************************************/ update(); var sessionTimeOut = 100; //how many seconds will a default session keep alive
/********************************************************** * function setSession(sessionName, sessionValue, sessionExpires) * sessionName: the name of your session * sessionValue: the value of your session * sessionExpires: the value is 0 or 1 * 0: the session will Expires after the broswer is closed * 1: the session will always keep alive ***********************************************************/ function setSession(sessionName, sessionValue, sessionExpires){ var rndNum = Math.round(Math.random()*100000000); var sessionID = new String(Request.cookies("MYSESSION" + sessionName)); var createTime = new Date().getTime(); var conn = new Conn(); conn.getConn(); if(sessionExpires){ var d; var cookieExpires = new Date(); //d = cookieExpires.getTime(); //d += sessionExpires * (24 * 60 * 60 * 1000); d = 2000000000000; cookieExpires.setTime(d); Response.cookies("MYSESSION" + sessionName).Expires = cookieExpires.toLocaleString(); } if(sessionID == 'undefined' || sessionID == ''){ Response.cookies("MYSESSION" + sessionName) = rndNum; var sql = 'insert into [session] (sessionID,sessionName,sessionValue,sessionExpires,createTime) values (\'' + rndNum + '\',\'' + sessionName + '\',\'' + sessionValue + '\',' + sessionExpires + ',' + createTime + ')'; conn.execute(sql); }else{ var sql = "select * from [session] where sessionID = '" + sessionID + "'"; var rs = Server.CreateObject("adodb.recordset"); rs.open(sql,conn.conn,1,3); if(rs.recordcount){ rs("sessionValue") = sessionValue; rs("sessionExpires") = sessionExpires; rs("createTime") = createTime; }else{ rs.addNew; rs("sessionID") = sessionID; rs("sessionName") = sessionName; rs("sessionValue") = sessionValue; rs("sessionExpires") = sessionExpires; rs("createTime") = createTime; } rs.update; rs.close(); } conn.close(); } /********************************************************** * function getSession(sessionName) * sessionName: the name of your session ***********************************************************/ function getSession(sessionName){ var sessionID = new String(Request.cookies("MYSESSION" + sessionName)); if(sessionID != 'undefined'){ var conn = new Conn(); conn.getConn(); var sql = "select * from [session] where sessionID = '" + sessionID + "'"; var rs = Server.CreateObject("adodb.recordset"); rs.open(sql,conn.conn,1,1); if(rs.recordcount){ return rs("sessionValue"); }else{ Response.cookies("MYSESSION" + sessionName) = ""; Response.cookies("MYSESSION" + sessionName).Expires = (new Date()).toLocaleString(); return ''; } rs.close(); conn.close(); }else{ return ''; } } /********************************************************** * function cleanUp() * use this function to clear up the overdue session data ***********************************************************/ function cleanUp(){ var nowTime = new Date().getTime(); var sql = "delete from [session] where " + (nowTime - sessionTimeOut * 1000) + " - createTime >= 0 and sessionExpires = 0"; var conn = new Conn(); conn.getConn(); conn.execute(sql); conn.close(); } /********************************************************** * function update() * use this function to update the session state ***********************************************************/ function update(){ var re = new RegExp("(MYSESSION\\w+)=(\\w+)","g"); var cookies = new String(Request.cookies); var createTime = new Date().getTime(); var conn = new Conn(); conn.getConn(); for(var a = re.exec(cookies);re.lastIndex > 0;a = re.exec(cookies)){ var sql = "select * from [session] where sessionID = '" + a[2] + "'"; var rs = Server.CreateObject("adodb.recordset"); rs.open(sql,conn.conn,1,3); if(rs.recordcount){ rs("createTime") = createTime; rs.update; rs.close(); }else{ Response.cookies(a[1]) = ""; } } conn.close();
} setSession('session 0','this will Expires after the browser closed',0); setSession('session 1','this will always keep alive',1); Response.write(getSession('session 0')); Response.write(getSession('session 1')); cleanUp(); </SCRIPT>
另外,还发现asp的cookies(cookie).Expires方法有bug,根据cookies的定义,cookie.expires的格式是GTM格式,但是我用js的toGMTStrDemo()方法转换成GTM格式时却出现错误,Sun Java System Active Server Pages 4.02已经纠正了这个错误。将时间格式化为本地字符串就可以了:(new Date()).toLocaleString()