代码没有问题,注销的时候调用 session_destroy()

解决方案 »

  1.   

    if ($_GET['action']=="logout") {
          

            session_unset();
            session_destroy();

    我也是这样用的呀怎么不行呀
      

  2.   

    PHP手册上的例子试试看:
    logout.php:
    <?php
    require('session.h.php');
    // Unset session data
    $_SESSION=array();
    // Clear cookie
    unset($_COOKIE[session_name()]);
    // Destroy session data
    session_destroy();
    // Redirect to clear the cookie.
    $time=time();
    header("Location: /logged_out.html?cache_defeat=$time");
    exit;
    ?>
      

  3.   

    如果你的代码没问题的话,应该是这个情况,其实,
    调用session_destroy();后,数据库中原来的记录已经删除了,只不过在注销后显示的页面里,有
    session_start(),调用了sess_write()函数,向数据库里插入了具有相同session_id的session.
    试试在注销后显示不包含session_start()的页面,然后看看数据库,该条记录应该删除了。个人认为,这并不是问题,这和以files的方式保存session的原理是一样的,因为当以files的方式
    保存session时,用户即使注销了,该session的文件仍然存在。然后通过自动的垃圾收集的方式将
    较长时间不更新的session文件删除。当以数据库的方式保存session时,php自动调用sess_gc()函
    数,将较长时间不更新的session的记录删除。呵呵,说了这么多,不知道能不能解决楼主的问题,只是个人意见。
      

  4.   

    另外,因为php默认以cookie的方式保存sessionid,所以才会在注销后向数据库中插入相同
    sessionid的记录,这又涉及到了有关sessionid的传递问题。目前cookie和url重写是比较
    常用的方法,但都有不足之处。个人认为,如果使用url重写的话,应该能够避免上述的情况。
      

  5.   

    该问题我也遇到了,我遇到的问题是我发现session_destory之后,数据库中该行数据仍然存在,不同的只是var变量那一个字段的内容没有了,但是session_id的字段和last_accessed字段仍然存在,不知何故。
      

  6.   

    要不要修改php.ini????php默认的是将session保存到文件,如下
    session.save_handler = files
    session.save_path = "C:\php\savesession"如果保存到数据库,如下
    session.save_handler = user
    session.save_path = "database name"