2014-01-20 162 views
1

我看到了很多关于这个问题,即时通讯仍然有问题...有人可以给我一个帮助吗?在php中销毁会话

登录页面:

<?PHP 
    header("Content-Type: text/html; charset=utf-8"); 
    $login = "root"; 
    $senha = "test"; 
    session_start(); 
    session_set_cookie_params(0); 

    if ($_POST['login'] && $_POST['senha']) { 
     if ($login == $_POST['login'] && $senha == $_POST['senha']) { 

     $_SESSION['login'] = $login; 
     $_SESSION['senha'] = $senha; 
     Header("Location: index.php"); 

     } else { 
      unset ($_SESSION['login']); 
      unset ($_SESSION['senha']); 
      header("Location: login.php"); 
     } 
    } 
?> 

注销页面:

<?php 
    session_start(); 

    $_SESSION = array(); 

    unset($_SESSION['login']); 
    unset($_SESSION['senha']); 
    setcookie(session_name(), '', time() - 3600, '/'); 
    session_destroy(); 

    Header("Location: login.php"); 

    exit(); 
?> 

即时得到这个错误:

PHP Warning: session_destroy(): Session object destruction failed in \\N\Users\cPanel\gil\public_html\gilberto\logout.php on line 11 
+0

请参考http://stackoverflow.com/questions/3512507/proper-way-to-logout-from-a-session-in-php。 –

回答

0

这是我一贯的做法,详情见的意见。

session_start(); 

// 1. unset all of the session variables 
$_SESSION = array(); 

// 2. delete the session cookie 
if (ini_get('session.use_cookies')) { 
    $params = session_get_cookie_params(); 
    setcookie(session_name(), '', (time() - 42000), $params['path'], $params['domain'], $params['secure'], $params['httponly']); 
} 

// 3. destroy the session. 
session_destroy(); 
+0

我试过了,它没有工作......我不知道它是否可以成为我的服务器的问题,因为我到目前为止尝试了所有的选项 – ledesma

+0

ive在另一台服务器托管了该页面,它确实工作......所以它可能成为我的服务器的问题..谢谢很多队友... – ledesma

0

你不必做$_SESSION = array();

只需使用session_destroy()喜欢这里说: http://www.php.net/manual/fr/function.session-destroy.php

+0

即使我拿出来,它不工作! – ledesma

+0

@ mArm.ch如果您想安全地销毁会话,则必须手动取消超全球及任何相关的cookie,这也是文档所说的:_“它不会取消设置与会话相关联的任何全局变量,也不会取消设置会话cookie。“_ –

+0

哎呀。今天不太好。 –

0

这是一个功能我用它来注销:

function logout(){ 

    $cookies = explode(';', $_SERVER['HTTP_COOKIE']); 
    foreach($cookies as $cookie) { 
     $parts = explode('=', $cookie); 
     $name = trim($parts[0]); 

     if(strtoupper($name) == 'PHPSESSID'){ 
      continue; 
     } 

     setcookie($name, '', time()-360000); 
     setcookie($name, '', time()-360000, '/'); 
    } 

    foreach($_SESSION as $key => $val){ 
     unset($_SESSION[$key]); 
    } 

    header('Location: account/login'); 
    die; 
}