首先,不能有多个sessionID,那样URL会变得很长。关掉浏览器,或丢了sessionID参数,session也就没用了,除非每次都在URL后面留着sessionID参数。暂时不考虑这个问题,把存活期屏蔽。
第二,由于每个访问只有一个sessionID,可能存在多个session共用一个sessionID,因此数据结构有所变化。
第三,要在页面建立时重构所有要使用到session的url,我不知道用asp如何操作url的重构,所以只能用一个函数来重构url以实现这样的功能。
<!--#include file = "conn.asp"-->
<SCRIPT LANGUAGE=jscript RUNAT=Server>
/**********************************************************
* Author: David
* blog: [url]http://blog.iyi.cn/david[/url]
* Email: [email]davidnick@126.com[/email]
* QQ: 76522970
***********************************************************/
update();
var sessionTimeOut = 10; //how many seconds will a default session keep alive
/**********************************************************
* function setSession(sessionName, sessionValue)
* sessionName: the name of your session
* sessionValue: the value of your session
***********************************************************/
function setSession(sessionName, sessionValue){
var rndNum = Math.round(Math.random()*100000000);
var sessionID = new String(Request.queryString("MYSESSION"));
var createTime = new Date().getTime();
var conn = new Conn();
conn.getConn();
if(sessionID == "undefined" || sessionID == ""){
var queryString = new String(Request.serverVariables("QUERY_STRING"));
var URI = Request.serverVariables("URL");
sessionID = new String(rndNum);
if(queryString == "undefined" || queryString == ""){
queryString = "MYSESSION=" + sessionID;
}else{
queryString += "&MYSESSION=" + sessionID;
}
var sql = "insert into [session] (sessionID,sessionName,sessionValue,sessionExpires,createTime) values (’" + rndNum + "’,’" + sessionName + "’,’" + sessionValue + "’,0," + createTime + ")";
conn.execute(sql);
conn.close();
Response.Status="301 Moved Permanently";
Response.AddHeader("Location",URI + "?" + queryString);
Response.end();
}else{
var sql = "select * from [session] where sessionID = ’" + sessionID + "’ and sessionName = ’" + sessionName + "’";
var rs = Server.CreateObject("adodb.recordset");
rs.open(sql,conn.conn,1,3);
if(rs.recordcount){
rs("sessionValue") = sessionValue;
rs("createTime") = createTime;
}else{
rs.addNew;
rs("sessionID") = sessionID;
rs("sessionName") = sessionName;
rs("sessionValue") = sessionValue;
rs("sessionExpires") = 0;
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.queryString("MYSESSION"));
if(sessionID != "undefined" && sessionID != ""){
var conn = new Conn();
conn.getConn();
var sql = "select * from [session] where sessionID = ’" + sessionID + "’ and sessionName = ’" + sessionName + "’";
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 sessionID = new String(Request.queryString("MYSESSION"));
if(sessionID == "undefined" || sessionID == ""){
return;
}else{
var createTime = new Date().getTime();
var conn = new Conn();
conn.getConn();
var sql = "update [session] set createTime = " + createTime + " where sessionID = ’" + sessionID + "’";
conn.execute(sql);
conn.close();
}
}
/**********************************************************
* function parseUrl(url)
* use this function to create the url if the session has been set
* if you want to use session in the next page, you must use this function
* url the url you want to use session
***********************************************************/
function parseUrl(url){
var sessionID = new String(Request.queryString("MYSESSION"));
if(sessionID != "undefined" && sessionID != ""){
var re = new RegExp("\\?","g");
var p = re.exec(url);
if(re.lastIndex){
url += "&MYSESSION=" + sessionID;
}else{
url += "?MYSESSION=" + sessionID;
}
}
return(url);
}
setSession(’session 0’,’this will Expires after the browser closed’,0);
cleanUp();
Response.write("<a href=\""&nb
