【问题标题】:Destroy session in php [duplicate]在php中销毁会话[重复]
【发布时间】:2014-02-09 14:03:40
【问题描述】:

我已经看到很多关于这个的问题,但我仍然有问题......有人可以帮我吗?

登录页面:

<?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

【问题讨论】:

标签: php session login logout destroy


【解决方案1】:

这是我常用的方法,请参阅 cmets 了解更多详情。

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();

【讨论】:

  • 我试过了,但没有用...我不知道我的服务器是否有问题,因为到目前为止我已经尝试了所有选项
  • 我在另一台服务器上托管了该页面,它确实可以工作......所以这可能是我的服务器有问题......非常感谢队友......
【解决方案2】:

你不必$_SESSION = array();

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

【讨论】:

  • 即使我把它拿出来也没用!
  • @mArm.ch 如果您想安全地销毁会话,则必须手动取消设置超全局和任何相关 cookie,这也是文档所说的:“它不会取消设置任何与会话关联的全局变量,或取消设置会话 cookie。"
  • 哎呀。今天不太起床。
【解决方案3】:

这是我用来注销的功能:

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;
}

【讨论】:

    猜你喜欢
    • 2018-01-21
    • 1970-01-01
    • 2012-05-25
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 2011-10-09
    相关资源
    最近更新 更多