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() 就可以了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Se...
    chinariver阅读 5,677评论 1 49
  • 项目开发常见流程介绍 需求调研 项目经理------>需求说明书 软件设计书 项目经理------>...
    _1633_阅读 1,459评论 1 6
  • 转自 :http://blog.csdn.net/taoff/articles/1921009.aspx 一、术语...
    stone_yao阅读 6,266评论 0 31
  • 背景在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称为cookie,cooki...
    时芥蓝阅读 2,384评论 1 17
  • 别把互联网神化了——《互联网的误读》读后 《互联网的误读》这本书,引用了丰富的论据,从历史学、社会学、政治学和经济...
    冯雪松_4d76阅读 183评论 0 1