追求新生活 名字2008

活着的意义

asp session丢失的分析和解决方法

asp不同asp.net,里面的session也不同处理,系统登陆后发觉经常会连接跳到登陆页面...我努力学习,研究,调试,终于做了一下工作.

我曾经以为是c:\windows\system32\inetsrv\metabase.xml修改aspsessiontimeout=20,默认值为20修改为960或者1400,不可以解决.

我把session.timeout直接写入asp文件中,也不可以解决.

如果asp/php上传文件大于200k又要修改

进行这两样设置都需要先关闭IIS服务,如果不会关闭可以在DOS命令符下输入 iisreset /stop 命令来关闭
然后找到 C:\windows\system32\inesrv\metabase.xml 文件,使用记事本等工具打开此文件(没有关闭IIS时,此文件为只读)
查找ASPMaxRequestEntityAllowed,默认值为
AspMaxRequestEntityAllowed="204800"
改为
AspMaxRequestEntityAllowed="20480000"
这样可以将默认最大允许上传的200K改为20M,同理,再来修改下载限制,查找AspBufferingLimit
默认值为
AspBufferingLimit="4194304"
改为
AspBufferingLimit="20480000"
设置由默认最大允许下载的4M附件改为20M,设置完成后,重启IIS服务

可惜的是。...还没有解决问题.天啊

近一个月的研究,该问题烦恼透了...我还不可以处理好。直到今天晚上和一知己朋友聊天,心情大好后,11点半才实验成功.

我参考了以下方法:大家不妨试试..........................
IIS--->>应用程序连接池--->>属性---->>[回收2000/ 35000][性能--session.timeout设置200不要20][运行状况]里的各项参数尽量都往大的改^_^),我不知道改拉那个才对的,反正我改完后所有的session都好拉.客户的网站和动网论坛的后台也跟着好拉 ,记得啊。web园里面,设置为 1 啊,asp是这样的。不同asp.net.

实践证明这是一个模糊的正确做法.解决了一个单位的网站了。它是虚拟主机.哈哈。好开心啊。明天补上相关的分析和思考学习的地方。

看简单例子先啦

chklogin.asp文件中
<!--#include file="conn.asp"-->
<%set rs=server.CreateObject("adodb.recordset")
sql="select * from admin where username=‘’"&request.Form("username")&"‘’"
‘’其中admin为存贮管理员帐号和密码的表名
rs.open sql,con,1,1
%>
<%if rs.eof then
response.Write"没有这个管理员"
else
%>
<%
username=trim(request.Form("username"))
password=request.Form("password")
%>
<%if password=rs("userpass") then
session("admin")="ercifang"
response.Redirect("manage.asp")
else
response.Write"本页为管理员专用页面"
end if
%>
<%end if%>

看红色的文字,这样就为管理员添加的了一个session

在系统管理 manage.asp文件中第一行设置
<%if session("admin")="ercifang" then
……
else
response.write"只有管理员才能进入本页面"
end if%>
这样,其他人直接访问manage.asp时就不能对本站进行管理了。

 

 再看进阶的了,研究下。哈哈。真是好东西啊.(以下这个和猛男坚的方向想法一样)

Session对象失效的客户端解决方法

 

问题的提出
ASP(Active Server Pages)技术的Session对象用于存储用户在对话期间的私有信息。当前用户的Session对象中定义的变量和对象能在页面之间共享,但是不能为应用中其他用户所访问,因此在用ASP开发网络应用程序时,可以利用Session对象保存和跟踪用户的状态信息。
Session对象有一个十分重要的属性:Timeout,它用于设置在会话资源被释放前,会话对象所能保持非活动状态的时间(默认值为20分钟)。当Timeout属性设置的时间值耗尽后,会话资源将被释放。通过Timeout属性破坏Session对象,避免了Session对象在服务器中无限制地产生,保护了服务器资源。但是,在实际网络开发中,常常遇到由于Session对象失效,用户状态信息丢失而导致应用流程无法正常完成的问题。
虽然利用Timeout属性释放资源的策略是出于保护服务器的目的,但是Session对象不可预知的失效性,却成为开发应用程序的一个弊病。因而在实际应用程序的开发中,必须解决Session对象失效的问题。
传统的解决方法
现有的解决方法都是采用服务器端方法解决Session对象失效问题。典型的处理方法分为两大类:失效前的处理和失效后的处理。
失效前的处理是指在Session对象尚未失效之前,对变量进行转存等处理,做到防患于未然。典型的解决方法是在应用程序中设定一个定时器,在Session对象失效前5分钟触发定时器,然后重新设置Session对象的各个变量和对象。由于必须在服务器端实时维护该定时器,并且必须保证该段程序在整个会话过程中处于激活状态,所以采用这种方法增加了服务器的额外负载。
失效后的处理是指在Session对象失效后,立即提示用户进行处理。典型的解决方法是在Session对象失效后,在服务器端保存断点,并提示用户重新登录,继续完成工作。这种方法实现简单,但是往往因为断点的不可完全自动恢复性,以及重新登录过程的复杂性,而受到最终用户的抱怨和指责。
针对以上两类解决方案的缺陷,笔者在编程实践中结合Cookie对象的特性,采用Session对象与Cookie对象在客户端联合存取会话级变量的方法,既避免了对服务器资源的额外需求,又解决了断点不可自动恢复的问题,而且还免去了重新登录的麻烦。
新的解决方法
Cookie对象是用来存储有关当前用户数据的小信息包,它可以在浏览器和Web服务器之间传递。在Web应用中,Cookie提供了一种用于跟踪、记录每个用户位置的机制。Cookie最常见的用处之一,就是保存一个Web应用中最后一次被访问的网络页面的时间以及日期或被访问的网址。
通常,Cookie对象在客户端Windows系统目录下Cookies子目录中以文件形式存储。存储在Cookie对象中的信息数据能够被保存较长时间,所以,可以将会话级变量备份在Cookie对象中,在Session对象失效后,通过检索并利用Cookie对象中的信息来自动恢复断点。
Cookie对象具有如下几个属性:
●Expires:设定Cookie对象到期的日期;
●Domain:将Cookie对象的传送确定为仅由Domain属性确定的成员;
●Path:确定Cookie对象传送路径;
●Secure:明确Cookie对象是否安全;
●HasKeys:返回Cookie对象是否包含多值。
如果没有显式定义Cookie对象的Expires属性,Cookie对象将在用户会话期结束时到期。
ASP中通过Request集合和Response集合读写对象。向Cookie对象写变量的语法如下:
Response.Cookies(cookie)[(Key)|.attribute] = value
其中,cookie是Cookie文件名,Key标明一个字典元素,attribute是Cookie 的一个具体性质,value是分给cookie的值。例如,为创建一个叫MyHobby的Cookie,并分配其值为:BasketBall,使用下述语法:
<%Response.Cookies(“MyHobby")=“BasketBall" %>
在客户机器上读取Cookie对象的方法如下:
Request.Cookies(cookie)[(Key)|.attribute]
其中,cookie是被请求Cookie的名字,Key是子关键字值下标,attribute是用于标明Cookie属性。例如:为抽取一个叫做MyHobby的Cookie中的信息并将它的值写到页面,使用下述语法:
<% Request.Cookies(“MyHobby") %>
需要注意的是:不能在HTTP页首信息已被送到请求浏览器之后,再向一个Cookie对象写入信息。换句话说,不能在任何HTML标识符被发送到浏览器之后才向浏览器发送Cookie信息。
具体实现
下面通过一个基于ASP技术的聊天室的实现,来介绍如何处理Session对象变量失效的问题
●在用户登录前初始会话级变量:UserName(用于存储登录用户名)。
<% Session(“UserName")=“" %>
//初始化Cookie对象
<% Response.Cookies(“UserName")=“" %>
●在用户登录时,设置会话级变量并备份到客户端Cookie对象中。
<%userName=Trim(Request.For(“UserName"))%>
<% Session(“UserName")=userName %>
//将会话级变量备份到客户端Cookie对象中
<% Response.Cookies(“UserName")=userName %>
●在用户发言的时候,读取会话级变量,如果该变量已经失效,则通过读取Cookie对象,恢复该会话级变量的属性值。
<% userName=Session(“UserName") %>
//如果变量已经失效,则检索客户端Cookie对象
<% if userName=“" then %>
<% userName=Request.Cookies(“UserName") %>
<% if userName=“" then %>
//如果用户未经过登录就进入聊天室,则该Cookie对象属性值为空。此时,提示用户出错,并转向用户登录页面
<% Response.Redirect “Error.html" %>
<% else %>
//从Cookie对象中恢复该会话级变量
<% Session(“UserName")=userName %>
<% end if %>
<% end if %>
●当用户退出聊天室时,清除会话级对象和Cookie对象。
<% Session(“UserName")=“" %>
//将Cookie对象属性值清除,避免用户不经过登录就直接进入聊天室
<% Response.Cookies(“UserName")=“" %>
以上代码在Windows NT 4.0+IIS 4.0+IE 5.0环境中运行通过。

ok,问题总算解决了。好开心啊。成个月在想该问题,终于解决了。哈哈。学习真好。

posted on 2011-03-29 23:38  pyman  阅读(5080)  评论(0编辑  收藏  举报

导航