Независимые частные сессии - PullRequest
0 голосов
/ 10 января 2011

Мне нужно управлять несколькими сессиями на сайте.Мне нужно начать приватные сессии, которые очень специфичны для каждой страницы, поэтому они прекратятся, как только я уйду со страницы.Но когда я перехожу на предыдущую страницу, я также могу использовать свой старый сеанс.Например:

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 ]

1 голос
/ 10 января 2011

Вы можете использовать session_name для этого, но если страница B завершает свой сеанс, как только завершается просмотр одной страницы, использование сеанса в первую очередь кажется пустой тратой времени.

0 голосов
/ 10 января 2011

Возможно, что-то вроде;

$_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'] может быть достаточным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...