我已经看过这里和其他地方的所有内容,似乎没有任何效果!
问题在于:
session_start()
时,我会被分配一个PHP会话ID。$_SESSION
变量变空。 PHP版本是:5.6.30-0+deb8u1
我做了一个小脚本在应用程序之外复制:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
echo '<pre>';
echo 'orig session.cookie_domain = '.ini_get('session.cookie_domain').PHP_EOL;
echo 'orig session.cookie_secure = '.ini_get('session.cookie_secure').PHP_EOL;
ini_set('session.cookie_domain', '.mydomain.com');
ini_set('session.cookie_secure', 'Off');
echo 'new session.cookie_domain = '.ini_get('session.cookie_domain').PHP_EOL;
echo 'new session.cookie_secure = '.ini_get('session.cookie_secure').PHP_EOL;
echo '-------------'.PHP_EOL;
print_r($_COOKIE);
session_start();
print_r($_COOKIE);
setcookie(ini_get('session.name'), session_id(), 0, '/', ini_get('session.cookie_domain'), false, false);
print_r($_COOKIE);
echo '-------------'.PHP_EOL;
echo 'session id: '.session_id().PHP_EOL;
echo '-------------'.PHP_EOL;
$_SESSION[session_id()][] = date('Y-m-d H:i:s');
print_r($_SESSION);
echo '</pre>';
//phpinfo();
脚本的输出是:
orig session.cookie_domain =
orig session.cookie_secure =
new session.cookie_domain = .mydomain.com
new session.cookie_secure = Off
-------------
Array
(
[__cfduid] => ddxxx
[_ga] => GA1.2.xxxx
[wp-settings-time-2] => 1500996194
[_gid] => GA1.3.xxxx
)
Array
(
[__cfduid] => ddxxx
[_ga] => GA1.2.xxxx
[wp-settings-time-2] => 1500996194
[_gid] => GA1.3.xxxx
)
Array
(
[__cfduid] => ddxxx
[_ga] => GA1.2.xxxx
[wp-settings-time-2] => 1500996194
[_gid] => GA1.3.xxxx
)
-------------
session id: 7n4mm16s525mpqo99r242p90l3
-------------
Array
(
[7n4mm16s525mpqo99r242p90l3] => Array
(
[0] => 2017-08-07 16:01:18
)
)
答案 0 :(得分:0)
执行此操作,以保留现有会话:
if(session_status() !== PHP_SESSION_ACTIVE) {
session_start();
}
答案 1 :(得分:0)
经过大量研究后,它出现了Varnish缓存导致问题。问题在于Varnish在没有设置会话cookie的情况下缓存页面,在刷新页面后无效。
在服务器上禁用Varnish解决了我的问题。
对于那些希望让Varnish保持活跃但让会议开始工作的人来说,也发现了这一点:Cache-Control Header Fix
答案 2 :(得分:0)
在php文件中检查is_writable(session_save_path()):
<?php
if (!is_writable(session_save_path())) {
echo 'Session path "'.session_save_path().'" is not writable for PHP!';
// you need set chmod -R 777 [session save path folder]
}
希望能帮到你