<?
require("cart_class.php");
session_start();if (!isset($_SESSION['CART'])) {
?>
//测试$_SESSION['CART']是否存在的
<script>
alert("no");
</script>
<?
$cart = new cart;
$_SESSION['CART'] = $cart;
}
else {
 $cart = $_SESSION['CART'] ;
}
if ($action == "add") {
 addtocart($cart,$id,$name,$price,$count);
//session_register("cart");
$_SESSION['CART'] = $cart;
}
if ($action == "del") {
delfromcart($cart,$id);
//session_register("cart");
$_SESSION['CART'] = $cart;
}
?>用SESSION保存一个对象.
这问题很奇特,有些时候这程序是正常的(正常就不说了),有些时候,明明$_SESSION['CART'] 已经存在,却执行alert("no");也就是$_SESSION['CART']不存在重新生成。

解决方案 »

  1.   

    session_start(); 
     
    放在最上边 试试
      

  2.   

    --明明$_SESSION['CART'] 已经存在--
    这点是怎么知道的?
      

  3.   


    因为首次执行整个页面的时候如下:
    if (!isset($_SESSION['CART'])) { 
    ?> 
    //测试$_SESSION['CART']是否存在的 
    <script> 
    alert("no"); 
    </script> 
    <? 
    $cart = new cart; 
    $_SESSION['CART'] = $cart; 

    else { 
    $cart = $_SESSION['CART'] ; 
    }有$_SESSION['CART'] = $cart;就把$cart 存到了$_SESSION['CART']里;
    然后有一个表单提交到本身页面的过程。
    在提交表单的时候,会有alert("no");提示
      

  4.   


    试过了,不行。
    session_start(); 
    放最上面的话,在用对象方法的时候貌似有问题。
      

  5.   

    Session在的实质就是“文件”存储。
    要在session中使用一个类的实例,必须先保证类的结构(申明)被加载。
    另外,session是迟刷新后生效的。也就是说,$_SESSION在这首次赋值是无值的,只有在第二次调用时,$_SESSION才有正确的值馈。
    楼主所说“有时正常”应该是1+N次以后。初次赋值是无效的。
    这种作法在技术研究上只能供学习研究,应用于大型构架时,SESSION存储会成为效率的瓶颈。
      

  6.   

    好像遇到过类似问题,看一下php.ini中 是否是:output_buffering = On
      

  7.   

    output_buffering = On 的;
      

  8.   

    第一次调用时,只是把一个$_SESSION['CART'] = $cart;
    接者是本页面向本页面传值(),使用到$_SESSION['CART']
    算第二次调用了吗?
      

  9.   


    “次”,简意就是(刷新)refresh页面。
      

  10.   

    明明$_SESSION['CART'] 已经存在,却执行alert("no");
    ---------------开头print 一下,这session值。。
      

  11.   


    第一次,提交给本页(a.php),在a.php文件中对SESSION进行了赋值,再对SESSION进行输出(SESSION无效);
    第二次,只刷新本页(a.php),无需提交任何值,再对SESSION输出(SESSION有效!)这个是比较庸俗的说法,文言化的说法。google一下比较官方哈。我一俗人。
      

  12.   


    应用于大型构架。。个人看法。1.SESSION必然会存在。但要保证小,只存储必要信息。(SESSION的要求)
    2.组件支持,如果能保证SESSION只存储USER——ID,而其它信息,有第三方组件完成。多取决于Frameworks的机制。
    3.富客户端存储,Web Browser(cookie 2KB),(Flash)SharedObject 100KB,用于作校验铺助客户端持久化,很不错。
    应该还有其它的机制,只是我学识较浅,以上都是一些工作中的经验。
      

  13.   

    多谢各位,问题找出来了,是自己粗心,没检查调用的别人的文件,原来那个文件里COOKIE,SESSION夹杂着(太相信那混球了),我汗呢。
    这次发帖学到了不少。