php会话空使用ssl?

时间:2011-03-26 14:04:47

标签: php ssl

假设我有一个名为

的页面

https://url.com/testhttps://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/testhttp://url.com/test2

它给我一些像

1页

326o42a9pblv48c9kb5va1mgorsf35gr39gu0tg8a6umr0rcdrgmasmmtbqvqm0dqa086bn3od07mpc11b65so62c1atrr3cgemaha1
1

第2页

326o42a9pblv48c9kb5va1mgorsf35gr39gu0tg8a6umr0rcdrgmasmmtbqvqm0dqa086bn3od07mpc11b65so62c1atrr3cgemaha1
1

但在https上

1页

326o42a9pblv48c9kb5va1mgorsf35gr39gu0tg8a6umr0rcdrgmasmmtbqvqm0dqa086bn3od07mpc11b65so62c1atrr3cgemaha1
1

第2页

326o42a9pblv48c9kb5va1mgorsf35gr39gu0tg8a6umr0rcdrgmasmmtbqvqm0dqa086bn3od07mpc11b65so62c1atrr3cgemaha1
<1> 1消失了。 问题是我想分享从页面测试到页面test2的会话。

编辑* 这是我的会话课

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['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'
);

感谢您查看

Adam Ramadhan

1 个答案:

答案 0 :(得分:2)

我觉得你可能在使用带有Suhosin补丁的PHP时,情况不是这样吗?

如果是,请在您的设置中选中此标记:

suhosin.session.cryptdocroot = On.

这基本上告诉服务器,会话密钥依赖于文档根目录,当你将http切换到https时会改变它。

编辑:你应该在你的php.ini中设置为Off,或者在使用多个ini文件的情况下,比如在debian中,在conf.d中可能有像suhosin.ini这样的文件。子目录,php.ini所在的子目录。不确定,是否可以通过ini_set()

更改此设置

在不相关的说明中,您确定要将gc_probability设置为0吗?这有效地禁用了会话垃圾收集。