当前位置: 首页 > 图文教程 > 网络编程 > ASP > 关于释放session的两篇文章(二)

ASP
asp下用fso生成js文件的代码
非常好用的asp备份,还原SQL数据库的代码
asp从字符串里截取N个带HTML的字符的函数
asp下Response.Buffer提速
ASP,vbs正则轮翻在文章段落后加上网址等内容
ASP为字符串中的网址自动加上链接
ASP vbs 代码大小写规范
ASP实现智能搜索实现代码
asp结合fso实现文件或文件夹创建删除等操作的函数
asp下对POST提交数据限制的解决方法
asp+Access通用的自动替换数据库中的字符串
asp alexa查询小偷程序
迅雷API接口_通过脚本调用迅雷自动下载资源
asp下的一个检测链接是否正常的函数
asp一句话木马原理分析
asp生成不需要数据库的中奖码
asp遍历目录及子目录的函数
asp数据库连接rs("user.id")
vbs或asp采集文章时网页编码问题
新手asp编程的基本法则与常见错误注意事项

ASP 中的 关于释放session的两篇文章(二)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 189 ::
收藏到网摘: n/a

  Deleting a Subset of Session Variables

When using Sessions to store variables in, I use a naming convention - for example, for all Customer related info I prefix the session variable with the substring Customer. (so for the CustomerID it would be Customer.ID, the customer username would be Customer.Name, etc.) This is very useful when viewing the session objects as you can see the related objects straight off.

The problem I had the other day was that I wanted to remove only those items from the Session which were prefixed SW.. So first off I used the following code:

'---------------------------------------
Session("SW.1")="Test 1"
Session("SW.2")="Test 2"
Session("Other")="Other"

For Each SessionItem in Session.Contents
  If Left(SessionItem,3) = "SW." then
    Session.Contents.Remove(SessionItem)
  end if
Next
'---------------------------------------

This seems fine, but when it's run, what happens is that SW.1 is removed, but SW.2 is NOT removed. Why? I'm not exactly sure, but I guess that the index is then reset so that SW.2 is now where SW.1 was, and seeing as we have iterated past that item in the For Each...Next statement, the loop just moves to Other, missing out SW.2 altogether! Eek!

So to get round this I wrote the following function, which will properly delete all Session variables that begin with a specified substring:

'---------------------------------------
function SessionRemoveSelected(sItemPrefix)
'/////////////////////////////////////////////////
' Remove Selected Items starting with sItemPrefix
' from the Session. e.g. SS. will remove SS.ID and
' SS.NAME but not CustomerID Returns True or False
' depending on whether any items where removed.
'---------------------------------------
' sItemPrefix [string] : Item Prefix
'/////////////////////////////////////////////////
  dim arySession()
  dim lCount, lPrefixLength
  dim SessionItem
  dim blnResult
    
  lCount = -1
  lPrefixLength = len(sItemPrefix)
  blnResult = false
    
  ' temporarily store in array items to remove
  For Each SessionItem in Session.Contents
    if left(SessionItem,lPrefixLength) = sItemPrefix then
      lCount = lCount + 1
      redim preserve arySession(lCount)
      arySession(lCount) = SessionItem
    end if
  Next

  ' remove items
  if IsArray(arySession)and lCount >= 0 then
    for lCount = LBound(arySession) to UBound(arySession)
      Session.Contents.Remove(arySession(lCount))
    next
    blnResult=true
  end if

  SessionRemoveSelected = blnResult
end function
'-------------------------------------------------