为了解释我的问题,我必须添加一些上下文信息:
我们有一个网站,它与会话一起工作,并且已经工作了 7 年没有任何问题,除了我们的服务器管理员,他无法登录,我们不知道为什么......直到现在......
我们的服务器管理员正在休假,所以我不得不做一些他的工作,它包括登录 ISP Config,它位于同一服务器和域上,使用不同的端口(8080),我在那里登录,检查一些值,然后当我回到我们的网站时,我无法登录,就像我们的服务器管理员一样。
session_id()
进行一些调试后,我发现每次刷新更改时会话都有问题。
使用ini_get
我得到session.cookie_domain
并且session.cookie_secure
是空的。
如果我这样做print_r($_COOKIE)
,则没有PHPSESSID
,如果我将它设置为任何值,它就会消失,即使我写了一个长过期它也不会保存,如果我像这样设置 2 个 cookie:
setcookie("PHPSESSID", "MYSESSION", time()+365*24*60*60, '/');
setcookie("a", "b", time()+365*24*60*60, '/');
然后print_r($_COOKIE);
我得到这个:
Array ( [a] => b )
我没有任何 .htaccess,所以我这边没有规则,似乎 ISP 配置中有一些东西改变了我存储 cookie 的方式。
我可以在 webmasters.stackexchange.com 上询问,但是当有人在登录 ISP 配置后登录我的网站时,我需要一个 PHP 答案来设置新值。
这是我当前要测试的代码:
<?php
session_set_cookie_params(3600,"/");
session_start();
//$_SESSION[b_id]=1;
setcookie("PHPSESSID", "GTS", time()+365*24*60*60, '/');
setcookie("a", "b", time()+365*24*60*60, '/');
echo "<div>b_id: $_SESSION[b_id]</div>";
echo "<div>session_id: ".session_id()."</div>";
echo "<div>cookie_domain: ".ini_get('session.cookie_domain')."</div>";
echo "<div>save_path: ".ini_get('session.save_path')."</div>";
echo "<div>cookie_secure: ".ini_get('session.cookie_secure')."</div>";
print_r($_COOKIE);
/*echo "<pre>";
print_r(ini_get_all());
echo "</pre>";*/
?>
这是输出,(session_id 值每次都会改变):
b_id:
session_id: du95eljbkct54qktvcd18a7ej0
cookie_domain:
save_path: /var/lib/php/sessions
cookie_secure:
Array ( [a] => b )
这是ini_get_all()
函数的输出:
[session.auto_start] => Array (
[global_value] => 0
[local_value] => 0
[access] => 2
)
[session.cache_expire] => Array (
[global_value] => 180
[local_value] => 180
[access] => 7
)
[session.cache_limiter] => Array (
[global_value] => nocache
[local_value] => nocache
[access] => 7
)
[session.cookie_domain] => Array (
[global_value] =>
[local_value] =>
[access] => 7
)
[session.cookie_httponly] => Array (
[global_value] =>
[local_value] =>
[access] => 7
)
[session.cookie_lifetime] => Array (
[global_value] => 0
[local_value] => 3600
[access] => 7
)
[session.cookie_path] => Array (
[global_value] => /
[local_value] => /
[access] => 7
)
[session.cookie_secure] => Array (
[global_value] =>
[local_value] =>
[access] => 7
)
[session.entropy_file] => Array (
[global_value] => /dev/urandom
[local_value] => /dev/urandom
[access] => 7
)
[session.entropy_length] => Array (
[global_value] => 32
[local_value] => 32
[access] => 7
)
[session.gc_divisor] => Array (
[global_value] => 1000
[local_value] => 1000
[access] => 7
)
[session.gc_maxlifetime] => Array (
[global_value] => 1440
[local_value] => 1440
[access] => 7
)
[session.gc_probability] => Array (
[global_value] => 0
[local_value] => 0
[access] => 7
)
[session.hash_bits_per_character] => Array (
[global_value] => 5
[local_value] => 5
[access] => 7
)
[session.hash_function] => Array (
[global_value] => 0
[local_value] => 0
[access] => 7
)
[session.lazy_write] => Array (
[global_value] => 1
[local_value] => 1
[access] => 7
)
[session.name] => Array (
[global_value] => PHPSESSID
[local_value] => PHPSESSID
[access] => 7
)
[session.referer_check] => Array (
[global_value] =>
[local_value] =>
[access] => 7
)
[session.save_handler] => Array (
[global_value] => files
[local_value] => files
[access] => 7
)
[session.save_path] => Array (
[global_value] => /var/lib/php/sessions
[local_value] => /var/lib/php/sessions
[access] => 7
)
[session.serialize_handler] => Array (
[global_value] => php
[local_value] => php
[access] => 7
)
[session.upload_progress.cleanup] => Array (
[global_value] => 1
[local_value] => 1
[access] => 2
)
[session.upload_progress.enabled] => Array (
[global_value] => 1
[local_value] => 1
[access] => 2
)
[session.upload_progress.freq] => Array (
[global_value] => 1%
[local_value] => 1%
[access] => 2
)
[session.upload_progress.min_freq] => Array (
[global_value] => 1
[local_value] => 1
[access] => 2
)
[session.upload_progress.name] => Array (
[global_value] => PHP_SESSION_UPLOAD_PROGRESS
[local_value] => PHP_SESSION_UPLOAD_PROGRESS
[access] => 2
)
[session.upload_progress.prefix] => Array (
[global_value] => upload_progress_
[local_value] => upload_progress_
[access] => 2
)
[session.use_cookies] => Array (
[global_value] => 1
[local_value] => 1
[access] => 7
)
[session.use_only_cookies] => Array (
[global_value] => 1
[local_value] => 1
[access] => 7
)
[session.use_strict_mode] => Array (
[global_value] => 0
[local_value] => 0
[access] => 7
)
[session.use_trans_sid] => Array (
[global_value] => 0
[local_value] => 0
[access] => 7
)
[session.cookie_domain] => Array (
[global_value] =>
[local_value] =>
[access] => 7
)
[session.cookie_httponly] => Array (
[global_value] =>
[local_value] =>
[access] => 7
)
[session.cookie_lifetime] => Array (
[global_value] => 0
[local_value] => 3600
[access] => 7
)
[session.cookie_path] => Array (
[global_value] => /
[local_value] => /
[access] => 7
)
[session.cookie_secure] => Array (
[global_value] =>
[local_value] =>
[access] => 7
)
如何将我的会话系统恢复为登录 ISP 配置之前的默认设置?
回答 Iłya Bursov 的问题
以隐身模式打开页面让我可以正常登录,PHPSESSID 不会改变。
清除 cookie 无效,PHPSESSID 仍在变化。
phpinfo 给了我一些相关信息:
Set-Cookie: PHPSESSID=ositfoouhvosgcklk2k14r7t25; expires=Fri, 07-Dec-2018 19:28:01 GMT; Max-Age=3600; path=/
// This is the same time it was created, so it is creating and expiring inmediately!
Expires: Thu, 19 Nov 1981 08:52:00 GMT
// 1981!?
我有一位同事(在同一个网络中)可以登录我的网站。
2天后,我无法解决问题,我们今天重新测试以重现此错误,我们的Web开发人员登录了ISP Config,现在他无法登录我的系统!
与我和我们的服务器管理员相同的错误。
我在 Windows 10 中使用 Chrome。
ISP 配置版本 3.1.11
看来这家伙 6 年前也有同样的问题:PHPSESSID not being saved to cookie