文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 国产软件 | 国外软件 | 汉化补丁 | 设为首页 | 加入收藏
网站首页 软件下载
数码学院 网络学院
业界资讯 | 图形图像 | 操作系统 | 网络冲浪 | 工具软件 | 办公软件 | 媒体动画 | 精文荟萃 | 认证考试 | 网站建设 | 技术开发 | 专栏
当前位置:abcdown网络学院技术开发ASP 学院asp中实现类似.NET的session
精品广告
推荐TOP10
·ASP无组件上载,带进度条,多文件上载
·学习ASP有用的代码(很有用哦!)
·巧妙破解开别人ASP木马密码的方法
·ASP.NET超时设置
·ASP实现多域名同一空间的处理实例
·ASP常用数据库连接及操作的方法和技巧
·微软建议的ASP性能优化28条守则
·ASP网站漏洞解析及黑客入侵防范方法
·安防有道:实施自动的SQL注入攻击测试
·从手工注入看防御之Access
·Windows 2003上传文件不能超过200k解决方法
·温柔的杀手—跨站ASP Script攻击
·微软建议的ASP性能优化28条守则
·用ASP生成ZT条型码
·数据采集程序(网页小偷)点滴心得
·ASP经典问答收藏之一
·一段防注入的通用脚本
·简单的防盗链(代码)
·ASP.Net项目出错处理方法汇总
·“在线访客”的制作方法
阅读TOP10
·ASP无组件上载,带进度条,多文件上载
·利用Cache、Timer(ATLAS)控制用户重复登陆的可行性方法
·经验总结:ASP与存储过程解析
·生成pdf文件的好东西,itextsharp
·W3 Jmail中文使用说明
·URL重写可删节日期模式---正则表达式之强力应用
·ASP数据库编程SQL常用技巧
·将人民币的数字转化成大写表示
·从网页上下载控件时制作CAB包的方法
·ASP+JS处理复杂表单的生成与验证
·ASP学习摘要
·处理二进制数据
·ASP技巧:ASP实现不存在的网页就自动发送邮件
·ASP Session对象的集合以及属性方法事件
·惊云高级会员网银在线支付接口程序
·ASP.NET超时设置
·automation服务器不能创建对象
·asp中可以保存参数值的分页代码
·学习ASP有用的代码(很有用哦!)
·在Web界面下如何生成像资源管理器一样的树形目录(版本2.0)

asp中实现类似.NET的session

日期:2005年7月8日 作者:清风网络学院 查看:[大字体 中字体 小字体]


session使ASP可以实现更多的功能,但是ASP Session有很多局限性:进程依赖性:ASP Session状态存于IIS的进程中,也就是inetinfo.exe这个程序。所以当inetinfo.exe进程崩溃时,这些信息也就丢失。另外,重起或者关闭IIS服务都会造成信息的丢失。

Session 状态使用范围的局限性:刚一个用户从一个网站访问到另外一个网站时,这些Session信息并不会随之迁移过去。例如:新浪网站的WWW服务器可能不止一个,一个用户登录之后要去各个频道浏览,但是每个频道都在不同的服务器上,如果想在这些WWW服务器共享Session信息怎么办呢?

Cookie的依赖性:实际上客户端的Session信息是存储与Cookie中的,如果客户端完全禁用掉了Cookie功能,他也就不能享受到了Session提供的功能了。


其实我们可以通过另外的方式自己实现session功能,解决这些问题。

进程依赖性:

只要将session信息独立于iis进程存放,自然可以解决这个问题。我们可以采用数据库存储的方式解决这个问题。

使用范围局限性:

我们同样可以采用数据库存储解决这个问题。

Cookie的依赖性:

可以采用URL重构的方式解决,asp.net中采用这样的形式传递SessionID:

http://localhost/MyTestApplication/(ulqsek45heu3ic2a5zgdl245)/default.aspx


但是在asp中,我们无法这样操作URL,只能在URL的尾部追加QueryString来传递SessionID

http://localhost/MyTestApplication/default.asp?SessionID=ulqsek45heu3ic2a5zgdl245


下面是详细的实现:

首先,要明确,我实现出来的“Session”并不是真正的Session,只是模拟Session的原理,采用别的方法模拟出来的一种机制。

<!--#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>


目前代码使用JScript用Cookie+数据库实现了基本的session功能,但还有很多不足。

setSession(sessionName, sessionValue, sessionExpires)函数用来建立session,sessionExpires用来指定两种session,0:访问期session,就相当于普通的Asp session。1:永久session,即使关闭浏览器,只要不清楚本地cookies,session将永远可用。

本来以为实现起来不会很复杂,可编写过程中发现,问题还真不少,本来还打算任意指定session的有效期,后来发现不可行!使用时必须在用户访问过程中频繁调用update()函数,以维护session状态;然后还要定时调用cleanUp()函数,清空过时的session。

另外,还发现asp的cookies(cookie).Expires方法有bug,根据cookies的定义,cookie.expires的格式是GTM格式,但是我用js的toGMTStrDemo()方法转换成GTM格式时却出现错误,Sun Java System Active Server Pages 4.02已经纠正了这个错误。将时间格式化为本地字符串就可以了:(new Date()).toLocaleString()

用URL实现cookie的功能在下篇文章中实现,敬请关注:)

代码下载:http://blog.iyi.cn/user/david/archives/images/mysession.rar

代码编写比较仓促,可能有所错漏,请指正。

(出处:ABC网络学院



上一篇:BT下载不再需要种子文件网站

下一篇:Bit,位,字节的区别


asp中实现类似.NET的session 相关软件: asp中实现类似.NET的session 相关文章:
·时代光华-卓越的现场管理 5S推行实务(刘敏欣)(上)
·时代光华-卓越的现场管理 5S推行实务(刘敏欣)(下)
·《Photoshop 彩色设计实例》
·Delphi应用程序开发精彩实例
·Photoshop CS 9.0 实例精选
·Delphi7编程技巧与实例精解
·Photoshop 7.0入门与提高实用教程
·PhotoShop7 设计百例 + 经典实例教程 + 滤镜教学
·3ds max & reactor动力学特效实战教程
·flash精彩实例集 1.0
·Photoshop视频实例教程系列-光边效果字
·photoshop实例教程:玉手镯制作及引申
·自动实现Windows系统更新
·如何实现局域网打印机共享
·Flash遮罩特效实例--可拖曳遮罩效果
·巧用Excel函数来实现工作表间的数据关联
·秘籍:超实用Photoshop处理照片艺术
·Flash遮罩特效实例--百叶窗效果
·计算运用实例:使人物皮肤更加通透
·Flash遮罩特效实例--电影文字

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.abcdown.net
首页 | 本站声明 | 下载帮助 | 发布软件 |
中文版权所有:ABC学院 浙ICP备05000717号