PHP - 无法结束会话

Posted

技术标签:

【中文标题】PHP - 无法结束会话【英文标题】:PHP - Can't end session 【发布时间】:2017-07-18 01:08:46 【问题描述】:

登录后我的网站上有一个链接,指向“index.php?logout=yes”,然后在我的 index.php 中有以下代码:

if ($_GET['logout'] == "yes") 
    session_unset();
    unset($_SESSION);
    session_destroy();
    echo "<meta http-equiv='refresh' content='0;url=index.php'>";
    $_SESSION = array();
    $_SESSION = [];

任何想法为什么它让您保持登录并且不结束会话?

【问题讨论】:

手动刷新页面是否有效? 不,因为我有一个语句来检查会话是否已设置,如果是,则将您重定向到 login.php。 是否应该在任何其他检查之前进行注销声明? 您必须先检查,index.php 上的条件是否为真?logout=yes ? session_unset(); == unset($_SESSION);$_SESSION = array(); == $_SESSION = []; 【参考方案1】:

如果是的话,这是你的 index.php 中的第一行代码吗? header('位置:/'); 而不是用于刷新的元标记

【讨论】:

【参考方案2】:

注销后,将用户重定向到主页(例如)

并且总是在使用之前启动会话

<php 
session_start();   
if ($_GET['logout'] == "yes") 
   session_unset();
   session_destroy();
   session_write_close();
   setcookie(session_name(),'',0,'/');
   session_regenerate_id(true);
   header('location: index.php');

【讨论】:

【参考方案3】:

请查看:session_destroy

为了完全终止会话,例如注销用户,还必须取消设置会话 ID。如果使用 cookie 传播会话 id(默认行为),则必须删除会话 cookie。 setcookie() 可以用于此。

试试这个

session_unset(); //or unset($_SESSION);
session_destroy();
session_commit(); // or session_write_close();
setcookie(session_name(),'',0,'/');
session_regenerate_id(true);

header('location: index.php');

【讨论】:

【参考方案4】:

公共函数注销()

    $this->session->set_userdata(array(
        'user_id'       => '',
        'fname'         => '',
        'lname'         => '',
        'gender'        => '',
        'username'      => '',
        'user_comp_id'  => '',
        'user_role'     => '',
        'validated'     => false,
        'plan_name'     => '',
        'plan_restriction' => '',
        'module_leave_bank' => '',
        'module_custom_logo' => '',
        'module_bulk_import' => '',
        'module_custom_rules' => '',
        'module_reports_download' => '',
        'module_integrations' => '',
        'module_chat_support' => '',
        'module_phone_support' => '',
        'users_limit'       => '',
        'leave_policies_limit' => '',
        'ous_limit'         => '',
        'sub_ous_limit'     => '',
        'leave_requests_limit' => '',
        'holidays_limit'    => '',
        'users_count'       => '',
        'leave_policies_count' => '',
        'ous_count'         => '',                       
    ));
    $cookies_id = $this->input->cookie('ci_session', TRUE);
    // $this->db->delete('user_logged_in',array('cookie' => $cookies_id)); // delete the cookies in database
    $this->session->sess_destroy();

    redirect('login', 'refresh');

【讨论】:

以上是关于PHP - 无法结束会话的主要内容,如果未能解决你的问题,请参考以下文章

Qt QProcess startDetached 无法结束进程(bash 会话)

76)PHP,session数据区的使用

PG_TERMINATE_BACKEND 不结束特定会话

结束会话后 ASP.NET 不会自动重定向到 defaultURL

调试会话在没有暂停的情况下完成

如果 TestFlight 会话没有以“会话结束”日志结束会发生啥?