登录ISP Config会永远破坏我的PHP会话和cookie

str*_*min 15 php session-cookies ispconfig

要解释我的问题,我必须添加一些上下文信息:

我们有一个网站,它与会话一起工作,已经工作了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, '/');
Run Code Online (Sandbox Code Playgroud)

然后print_r($_COOKIE);我明白了:

Array ( [a] => b )
Run Code Online (Sandbox Code Playgroud)

我没有任何.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>";*/
?>
Run Code Online (Sandbox Code Playgroud)

这是输出,(session_id值每次都改变):

b_id:
session_id: du95eljbkct54qktvcd18a7ej0
cookie_domain:
save_path: /var/lib/php/sessions
cookie_secure:
Array ( [a] => b )
Run Code Online (Sandbox Code Playgroud)

这是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
)
Run Code Online (Sandbox Code Playgroud)

如何在登录ISP配置之前将会话系统恢复为默认值?


回答IłyaBursov的问题

在隐身模式下打开页面让我正常登录,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!?
Run Code Online (Sandbox Code Playgroud)

我有一个同事(在同一个网络中)可以登录我的网站.


2天后,我无法解决问题,我们今天进行了新的测试以重现此错误,我们的网站开发人员登录了ISP Config,现在他无法登录我的系统!

与我和我们的服务器管理员相同的错误.

我在Windows 10中使用Chrome.

ISP Config 3.1.11版

看起来这个家伙6年前有同样的问题:PHPSESSID没有保存到cookie

str*_*min 1

好吧,测试四个月后,我将回答我自己的问题以帮助其他遇到此问题的人。

\n\n

ISP Config 使用默认的 PHP 名称会话 id,因此,如果您在同一域中运行不同的系统,则不能使用相同的 id。

\n\n

解决这个问题的第一种方法是按照@misorude在他的评论中所说的,在启动任何会话之前将所有会话名称更改为不同的名称:

\n\n
session_name(\'MySystem\'); // your session string ID\nsession_start();\n
Run Code Online (Sandbox Code Playgroud)\n\n

对于您的会话字符串 ID,请使用您想要的任何字符串,在整个系统上始终使用相同的字符串,并且不要使用默认值“PHPSESSID”。

\n\n

会话过期太快,这是因为我在与secondary2none链接评论相同的域中运行 2 个系统。

\n\n

较短的session.gc_maxlifetime时间,将用于域中的所有系统。

\n\n

这个问题显示了解决此问题的第二种替代方法,即更改会话目录,调用session_save_path()函数。

\n\n

还有第三种方法,如果您不想更改所有文件中的会话名称 id 或会话目录,您还可以更改session.save_path配置,如\xc3\x81lvaro Gonz\xc3\xa1lez建议。

\n