PHP 销毁 session

PHP session

PHP 自带了 session 管理。这极大地提高了 session 管理的便捷性,不愧于最好的语言。内置了不少以 "session_" 开头的函数,在程序的任何地方都能够调用这些函数来处理与 session 相关的事情。

session_start(): Start new or resume existing session
session_id(): Get and/or set the current session id
session_destroy(): Destroys all data registered to a session
session_abort(): Discard session array changes and finish session
session_unset(): Free all session variables
session_reset(): Re-initialize session array with original values
session_register_shutdown(): Register `session_write_close()` as a shutdown function
session_write_close(): Write session data and end session

问题背景

在拥有多服务的网站后台中,有一个专门提供 session 管理的 SSO 服务。顾名思义,单点登录服务,就是对其他服务提供登录、鉴权、session 管理等功能的服务。

不同的服务可以使用不同的编程语言来编写,服务之间可以通过 rpc 或者 HTTP API 的方式来通信。在我遇到问题的场景下,SSO 是用 Go 来编写的,业务 A 是用 PHP 来编写的。

问题:在注销账号的时候,需要将所有服务里相关的 session 都注销掉。而在业务 A 中,怎样注销指定的 session 呢?

采用的解决方案

在所有的服务中,session id 是从 HTTP Cookie 中获取。使用的框架是 CodeIgniter,配置好 $config["cookie_name"] 即可。

经测试,如下方法可以:

class Session_controller extends API_controller {

    function __construct() {
        parent::__construct();
    }

    function action_post() {
        // clear all session data
        session_destroy();
        // register `session_write_close` as a shutdown function
        session_register_shutdown();
        // shutdown the current session
        session_write_close();

        $this->response(0, self::HTTP_OK, "OK", null);
    }

理论上而言,调用 session_abort() 就可以了。

你可能感兴趣的:(PHP 销毁 session)