php - 登录 ISP Config 永远破坏了我的 PHP session 和 cookie

标签 php session-cookies ispconfig

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

我们有一个网站,它与 session 一起工作并且已经工作了 7 年没有任何问题,除了我们的服务器管理员,他无法登录,我们一直不知道为什么......直到现在......

我们的服务器管理员正在休假,所以我不得不做他的一些工作,包括登录位于同一服务器和域上的 ISP 配置,使用不同的端口 (8080),我登录那里,检查一些值,然后当我返回我们的网站时,我无法登录,就像我们的服务器管理员一样。

做一些调试我发现这是 session 的问题,在每次刷新 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
)

如何将我的 session 系统恢复为登录 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

最佳答案

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

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

第一种方法解决这个问题是做什么 @misorude在他的评论中说,在开始任何 session 之前将所有 session 名称更改为不同的名称:

session_name('MySystem'); // your session string ID
session_start();

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

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

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

this question显示了第二种替代方法来解决它改变 session 目录,调用session_save_path()功能。

如果您不想更改所有文件中的 session 名称 ID 或 session 目录,则有第三种方法,您还可以更改 session.save_path配置为 Álvaro González建议。

关于php - 登录 ISP Config 永远破坏了我的 PHP session 和 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53671777/

相关文章:

php - 雅虎财经数据查询计数和效率

php - 如何改进我的用户登录方案

security - 如何配置 grails 和 shiro 将 cookie 标记为安全?

php - 跳过/绕过 A mysql_query 上的数据

php - 我想使用 PHP 更新 MySQL 数据库表

php - ISPConfig 更改默认 PHP 版本

未提供 Apache2 默认主机 - ispconfig

ssl - ISPConfig LetsEncrypt SSL

php - MySQL 不更新两个数据库中的记录

http - cookie "Secure"标志如何工作?