我做了一个电子商务方面的网站,需要在我的页面上选购商品,然后到网上交易的网站去付费,在付费完成后回到我的页面,然后就可以继续其他的操作了.可是当我从付费的网站回到我的页面后,Session就失效了,变为了null.哪位高手能帮我解决这个问题啊?急!!!

解决方案 »

  1.   

    超时了?Session默认是20分钟,可以设长时间,可以考虑用cookies或数据库存购物车
      

  2.   

    超时了?Session默认是20分钟,可以设长时间,可以考虑用cookies或数据库存购物车
      

  3.   

    付费完成后,你就 可以查看你的购物清单了.想购物可以重新提交呀.应该是没有什么问题的,先前我也做个,是没有问题的.建议不要用COOKIES,会有问题的.
    还可以考虑用HASHTABLE.根据VALUE在取出相应的字段.
      

  4.   

    我是选购一些数据,付费以后就可以下载.数据是存放到Session中的.如果用户付费成功,就将返回到我的页面可以继续下载.但是,回到我的页面以后Session就失效.
      我跟踪了Session_Start函数,发现这个函数被调用,也就意味着Session被重新创建了,以前的Session就丢失了.有比较好的解决办法吗?
      

  5.   

    超时Session会丢失的,同意1楼的看法
      

  6.   

    换个存储的方式吧。。对于服务器上的Session值,一般是不依赖的。
      

  7.   

    用其他什么方式比较好啊?我就对Session的使用比较熟悉
      

  8.   

    在关闭浏览器,Session就失效了
    做个测试:
    如果在开发的系统中使用Session状态:
    在不关闭Browser的情况下,进行用户登录,会发现可以直接跳过"登录模块"的密码检测,直接进入该用户的页面.
    原因是:因为登录在系统中的用户没有退出,Session状态只对当前的用户有效.关闭浏览器,关闭了数据库的连接,退出系统,Session就失效了
      

  9.   

    用cookic吧,用Session有时间限制,要不然就用一个隐藏的框架页循环刷隐藏页面,在隐藏页面中调用这个Session,就不会失效了!
      

  10.   

    我看不像超時的問題
    我估計是妳跳進支付網站的時候用的是本窗口 而那個網站為暸安全把所有的COOKIE和SESSION都给清理暸,然后存暸它自己的數據。
    妳再跳囬來 相當于新開的窗口,從而丟暸SESSION
    試下支付窗口新開
      

  11.   

    楼上的解释不对,“那个”网站是不可能去清理原来“这个”网站的session的哈。session在服务器hold的。
    楼主跳到付费的网站的时候,自己的页面还在吗?是跳转的还是新开的窗口?
      

  12.   

    听楼上两位的都有道理~~自己的页面不在了,是在_Parent打开的.不过我跟踪了Session_End,发现这个事件在我关闭浏览器之前不会发生.而跟踪Sessin_End,发现从支付网站回来后,这个函数就被调用了.
      

  13.   

    TO  james_hunter(辉) 
    SESSION的工作原理知道不?
    SESSION是基于COOKIE的
    也就是说SESSION的部分信息是随HTTP流传递的  当浏览器跨应用重新定向后 COOKIE已经被改变了
    服务端里的部分数据已经无法取出SESSION自然会丢
      

  14.   

    而跟踪Sessin_End,发现从支付网站回来后,这个函数就被调用了.这就是因为COOKIE被强行中断了 SESSION结构是临时性的 码匙丢了SESSION也就作废不信的话 可以完全彻底的禁止COOKIE  你再看看SESSION还能不能起作用?
      

  15.   

    可是我跟踪Session_End,发现从支付网站回来没有调用这个函数
      

  16.   

    不是超时问题,Session是在站内的ASPX页面之间跳转时能自动保存的数据,但是因为你跳转到的付费页面不是你站内的ASPX页面,你访问付费页面后Session就丢掉了,再跳回来当然就是Null。给楼主一个建议,在这种情况下付费页面应该在新窗口中打开,不要用原窗口跳转,这样楼主你的Session就不会丢了。
      

  17.   

    一般是不会丢失的。有没有修改了非AppData目录下的文件?
      

  18.   

    应该是没有修改AppData目录下的文件,我觉得比较可能的是调用了其他的付费网页后又回到本页面的原因.
      

  19.   

    jerryfos(想飞)"在这种情况下付费页面应该在新窗口中打开,不要用原窗口跳转,这样楼主你的Session就不会丢了" 我试了还是不行,这样的话我返回的页面怎么和我原窗口相互关联啊?
      

  20.   

    TO 楼主   原页面不动  用JS在前端OPEN支付网站 很简单嘛
      

  21.   

    想飞说的是对的,楼主要关联原窗口,可以使用模态窗口来打开新页面。你可以看看淘宝上使用支付宝时采用的方法。另外,微软的AJAX extension 有一个很酷的模态窗口效果,也可以参照。
    虔诚,你说的部分是对的,SessionID 可以基于cookie,关闭浏览器或者重订向URL会导致本地的Session cookie失效.但是因为Session对象本身是在服务器的,并且不会丢失,所以也可以保存sessionID的session机制,而是自己实现一个持久化SessionID的方法(web.config中修改设置<system.web> <sessionState cookieless="true" /> </system.web>,使Session的传递脱离Cookie).另一方面,因为SessionID的cookieKey是不可预知的(至少我不知道怎么预知),除非利用ActiveX删除windows\cookie下的所有文件,否则新的网站不太有可能去清空前一个网站的cookie.
      

  22.   

    关于session和cookie,这篇文章不错:
    http://www.360doc.com/showWeb/0/0/109481.aspx
      

  23.   

    SessionID丢了.服务器为你新建了一个会话
      

  24.   

    如果不对session进行存取操作,每一次的请求将是新的session.
      

  25.   

    awuzi(阿无知) ( ) 信誉:100    Blog   加为好友  2007-04-12 10:14:53  得分: 0  
     
     
       如果不对session进行存取操作,每一次的请求将是新的session.
    ______________________________________________________________________________
    这句话什么意思啊?
      

  26.   

    james_hunter(辉)  如何关联窗口?保存sessionID的session机制是怎么回事?
      

  27.   

    同一个浏览器,只会保存一个Session的内容,肯定是你转到付费网站的时候,那个网站重建Session了,这样,再转回到你的网站的时候,Session肯定没了,建议你用另外的方法来做...
      

  28.   

    购物车一般都是做张表,用session的话不及时清空可能会增加系统开销,清空不正确又会有错误,况且session本身就可能产生丢值的问题!
      

  29.   

    在服務器上打開 state server服務(裝過.net framework就有 )
    在webconfig中設置Session 的mode為StaterServer
    這樣把 session的信息存放在專門的server中試試,穩定的多,值不容易丟。
      

  30.   

    我也想用楼上所说的方法,可是用起来以后我的ajax方法出错了,并且错误莫名其妙.我用的是AjaxPro,函数的返回值正确,在前台调用那个方法时候就出错了.
      

  31.   

    Yzw_2006() ( ) 信誉:100    Blog   加为好友  2007-04-12 16:47:15  得分: 0  
     
     
       建议到付费的那个网站时,新打开一个窗体,保留原来本网站的页面。付费确认最好是那边能返回一个值用来判断。
      
     
    我改成这样子了,原来的网页没关掉,那边也返回了一个值,可是Session还是无效啊
      

  32.   

    谢谢大家的回复,问题解决,不过方法不是很好,把Session的值先存到数据库中,然后付费回来以后再从数据库中读取出来
      

  33.   

    看看提交的表单中有没有提供自定义字段...
        我用的神州付做的支付接口,里面有privateField,可以定义些自定义...在支付成功后,返回服务器返回地址时,同时用privateField返回了原本要用session保存的数据...