本人要做一个访问计数器,中间有段简单的代码:'判断是否为新创建的Session对象,如果是,将Counter变量加1,并写入文件
   If  Session.IsNewSession then
    Counter+=1
    Dim objWriter As New StreamWriter(Server.Mappath("Counter.txt"))
    objWriter.Writeline(Counter)
    objWriter.Close()
   End if按书上说法,以及在网上查的资料,对于Session.IsNewSession变量 如果会话是新创建的才是true吧,才执行下边的啊,刷新时不执行加1才对。为什么我运行的时候,刷新执行加1了呢。反而改成“NOT Session.isnewsession”刷新却不执行了呢居然达到了效果。这是为什么?哪个地方弄错了?
另外,如果改成“not Page.ispostback”,按我的理解只有第一次执行。为什么每次刷新都执行了呢?用page.ispostback是正好相反,反而达到想要的效果了。这是为什么?谢谢,问题出在哪?怎么改?

解决方案 »

  1.   

    Session.IsNewSession 是否为true,其实是检查ASP.NET_SessionId是否存在,当不存在时,为true,否则为false。如果你之前已经打开过网页,ASP.NET_SessionId已建立,那你新开其它页面或标签它都为false了。
      

  2.   

    为什么每次你刷新页面都会执行“not Page.ispostback”里面的代码呢.Page.IsPostBack其实是处理回发的。当你Submit后,IsPostBack为true。如果你在新打开页面时,只是刷新页面,那其实就是不断的加载页面,并没有回发,所以它就是false了。
      

  3.   

    session是不可靠的
    在网页中嵌入脚本
    统计IIS日志
    利用HttpModule
    使用免费流量统计站点
    记录用户登录日志,通过IP记录流量
    对每一个来访IP,从数据库中查询,今天是否登录过,如果没有,就判断为新访问,加数据库中访问量加1,同时将此IP也存入数据库.
      

  4.   

    也就是说,必须点击Submit或者有数据回发时,Ispostback才会变为true. 如果第一次打开,没有点击Submit或者数据回传只是刷新,那么Ispostback就是false, 没有回发??是这么理解吗?
      

  5.   


    但是我打开第一次时,不管在这个页面上不断刷新,还是再打开一个页面,数值都会加1,代码都会运行。这是怎么回事呢?难道说明是Asp.net_SessionId一直不存在,一直没有建立吗?
    还有就是Asp.net_SessionId,在哪个地方看?怎么看已经建立没有?谢谢!
      

  6.   

    我再次回复deoing和wuyq11的,二位能不能再帮忙回答下?谢谢!
      

  7.   

    其实换个方法解决就是,无必要纠结在这里
    建一个session对象假设取名为"flag",每次page_load时设置其值为1,计数程序每次检查如果flag=1则不增加访问量,如果flag !=1则访问计数器+1你看这样行不