php сессии пустые с помощью ssl? - PullRequest
0 голосов
/ 26 марта 2011

Допустим, у меня есть страница с именем

https://url.com/test и https://url.com/test2

class Test extends Application {
    # put global things here
    function __construct() {
        $this->library ( 'sessions' );
        $this->helper ( 'active' );
    }

    function test() {
        $this->sessions->set('login',1);
        echo session_id().'<br/>';
        echo $this->sessions->get('login');
    }
    function test2(){
        if (is_get('d')) {
            $this->sessions->del('login');
        }
                echo session_id().'<br/>';
        echo $this->sessions->get('login');
    }
}

, когда я использую http://url.com/test и http://url.com/test2

это дает мне что-то вроде

page1

326o42a9pblv48c9kb5va1mgorsf35gr39gu0tg8a6umr0rcdrgmasmmtbqvqm0dqa086bn3od07mpc11b65so62c1atrr3cgemaha1
1

page2

326o42a9pblv48c9kb5va1mgorsf35gr39gu0tg8a6umr0rcdrgmasmmtbqvqm0dqa086bn3od07mpc11b65so62c1atrr3cgemaha1
1

но при https

page1

326o42a9pblv48c9kb5va1mgorsf35gr39gu0tg8a6umr0rcdrgmasmmtbqvqm0dqa086bn3od07mpc11b65so62c1atrr3cgemaha1
1

page2

326o42a9pblv48c9kb5va1mgorsf35gr39gu0tg8a6umr0rcdrgmasmmtbqvqm0dqa086bn3od07mpc11b65so62c1atrr3cgemaha1

1 пропало. проблема в том, что я хочу поделиться сессией от тестовой страницы до тестовой страницы2.

edit * вот мой класс сессий

class Sessions {
    private $config;
    public function set($key, $value) {
        if (isset ( $_SESSION [$key] )) {
            return false;
        }

        if (! isset ( $_SESSION [$key] )) {
            $_SESSION [$key] = $value;
            return true;
        }
    }

    public function get($key) {
        if (! isset ( $_SESSION [$key] )) {
            return false;
        }

        if (isset ( $_SESSION [$key] )) {
            return $_SESSION [$key];
        }
    }

    public function del($key) {
        if (! isset ( $_SESSION [$key] )) {
            return false;
        }
        if (isset ( $_SESSION [$key] )) {
            unset ( $_SESSION [$key] );
            return true;
        }
    }

    public function flush() {
        // do we still need this?
        $_SESSION = array ();
        session_destroy ();
        $this->refresh ();
    }

    public function refresh() {
        session_regenerate_id ( true );
    }

    function __construct() {
        $this->config = config ( 'sessions' );

        # doing some importing things
        ini_set ( 'session.cookie_httponly', $this->config ['cookie_httponly'] );
        ini_set ( 'session.gc_probability', $this->config ['gc_probability'] );
        ini_set ( 'session.gc_divisor', $this->config ['gc_divisor'] );
        ini_set ( 'session.hash_function', $this->config ['hash_function'] );
        ini_set ( 'session.gc_maxlifetime', $this->config ['gc_maxlifetime'] );

        # start the engine
        session_start ();
    }
}

config

$config['sessions'] = array(
        'gc_probability' => '0',
        'gc_divisor' => '100',
        # 'cookie_domain' => 'www.networks.co.id',
        # http://us2.php.net/manual/en/session.configuration.php
        'cookie_httponly' => FALSE,
        # SHA512
        'hash_function' => 'SHA512',
        'gc_maxlifetime' => '1800'
);

Спасибо за просмотр

Адам Рамадан

1 Ответ

2 голосов
/ 26 марта 2011

У меня такое ощущение, что вы можете использовать PHP с патчем Suhosin, не правда ли?

Если это так, отметьте этот флажок в ваших настройках:

suhosin.session.cryptdocroot = On.

Это в основном говорит серверу, что ключ сеанса зависит от корня документа, который изменяется при переключении http на https.

edit : у вас должно быть установлено значение Off в вашем php.ini, или в случае использования нескольких INI-файлов, например, в Debian, возможно, есть файл типа suhosin.ini в подкаталоге conf.d где php.ini находится. Не уверен, возможно ли изменить этот параметр через ini_set ()

На несвязанной ноте вы уверены, что хотите установить для gc_probability значение 0? Это эффективно отключает сессионную сборку мусора.

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