<?php
ob_start('ob_gzhandler');


session_save_path('2;D:/sessionFile/sessionFile');
@session_start();

$_SESSION['user'] = 'lowell';
$user = $_SESSION['user'];

session_register($user);
echo $user . '<br />';

session_unset();
echo $user . '<br />';

session_destroy();
echo $user . '<br />';
?>
为什么session_unset()与session_destroy()后会话变量还在?还显示lowell?

解决方案 »

  1.   

    $user = $_SESSION['user'];
    这个表达式中  $user 是 $_SESSION['user'] 的一份拷贝,不是引用。换句话说 session_unset(), session_destroy(); 只是把$_SESSION['user']摧毁了,$user仍是一个独立的变量。而session_register($user); 只是注册了一个变量 $_SESSION['lowell'](另,该函数已被最新版的PHP-5.4移除,不建议使用!)
      

  2.   

    我的程序改为这样子:<?php
    ob_start('ob_gzhandler');


    session_save_path('2;D:/sessionFile/sessionFile');
    @session_start();

    $_SESSION['user'] = 'lowell';

    echo $_SESSION['user'] . '<br />';

    session_unset();
    echo $_SESSION['user'] . '<br />';

    session_destroy();
    echo $_SESSION['user'] . '<br />';
    ?>显示却:
    lowellNotice: Undefined index: user in D:\Apache Group\Apache2\htdocs\PHPProject\index3.php on line 15
    Notice: Undefined index: user in D:\Apache Group\Apache2\htdocs\PHPProject\index3.php on line 18怎么解决这个错误?
      

  3.   

    session_unset是释放所有的session数组中的注册过的(registered)变量。session_destroy是删除当前session的所有相关信息。既然你都注销了session里的数据,再去访问可定会报错的 !要想不报错,可以设置错误级别error_reporting()  ;
      

  4.   

    $user 是user变量了,不是session
      

  5.   

    是 的,session里面的那个不同于 注册后的$user ,
    你显示的应该 echo $_SESSION['user'];
      

  6.   

    无论unset还是destroy都是对session进行操作,与$user变量无关,
    两个完全不同的变量,虽然他用了她进行了初始化
    这不是指针,简单copy地址,而是进行内容复制,
    所以互不影响
      

  7.   

    楼主的基础有点薄弱啊,楼上说的都有理。session的用法LZ已经会用了,只是LZ搞不清楚session操作的对象
      

  8.   

    首先,这个不是错误,只是一个提醒。
    另外你明明uset和destroy掉了,还想取session值,php当然提醒你没有这个索引值了