假设我有一个名为
的页面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
时它给我一些像
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
答案 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吗?这有效地禁用了会话垃圾收集。