独立私人会议

时间:2011-01-10 06:26:52

标签: php session

我需要在网站中管理多个会话。我需要启动一个特定于页面的私人会话,所以当我离开页面时它将终止。但是当我浏览到上一页时,我也应该可以使用我的旧会话了。例如:

Page A -> Starts Session A
Page A -> is forwarded to Page B

Page B -> Start its own private Session B
Page B -> Completes the tasks and Terminates its private session B
Page B -> Redirects to Page A

Page A -> Again display the page using its old Session A

我可以在同一网站内开始多个会话吗?如果是,我该如何管理?

2 个答案:

答案 0 :(得分:1)

您可以使用session_name,但如果页面B在单个页面查看完成后立即终止其会话,那么首先使用会话似乎是浪费时间。

答案 1 :(得分:0)

也许是类似的东西;

$_SESSION[$_SERVER['PHP_SELF']]['name'] = $value;

//Page X termination
unset($_SESSION[$_SERVER['PHP_SELF']]);

简单地在这里简单地抛出想法。


扩大会议数据的私有化;包装器可以提供帮助:

class Session implements ArrayAccess{

    private $_data = array();

    public function __construct(){
        $this->_data = $_SESSION;
    }

    public function offsetSet($offset, $value){
        $this->_data[$_SERVER['PHP_SELF']][$offset] = $value;
    }

    public function offsetExists($offset){
        return isset($this->_data[$_SERVER['PHP_SELF']][$offset]);
    }

    public function offsetUnset($offset){
        unset($this->_data[$_SERVER['PHP_SELF']][$offset]);
    }

    public function offsetGet($offset){
        return isset($this->_data[$_SERVER['PHP_SELF']][$offset])
            ? $this->_data[$_SERVER['PHP_SELF']][$offset]
            : null;
    }

    public function __destruct(){
        $_SESSION = $this->_data;
    }

}

$session = new Session;
//etc

鉴于查询字符串或更多字符串是相关的,您可以散列密钥的相关值。

例如:$key = md5($_SERVER['PHP_SELF'] . $_SERVER['QUERY_STRING']);虽然使用$_SERVER['REQUEST_URI']作为键可能就足够了。