首页 > 解决方案 > 管理员如何在登录时增加当前会话?

问题描述

使用带有插件 login-password-less.php 的 adminer-4.7.7 我找到了一种无需输入凭据即可进入管理员的方法。但是进入管理员我想尽可能保持当前会话(包括当前数据库和打开的表),即使在第二天浏览关闭/打开之后......有管理员会话时间参数/工具吗?这适用于我的家用笔记本电脑(kununtu18、apache 2、php 7.4),因此忽略了安全中断...... apache 配置决策也是可能的。

我该怎么做 ?

修改: 我尝试像 Jasar Orion 代码一样增加 gc_maxlifetime,但失败了

我将 adminer/include/bootstrap.inc.php 中的会话块修改为:

global $adminer, $connection, $driver, $drivers, $edit_functions, $enum_length, $error, $functions, $grouping, $HTTPS, $inout, $jush, $LANG, $langs, $on_actions, $permanent, $structured_types, $has_token, $token, $translations, $types, $unsigned, $VERSION; // allows including Adminer inside a function

if (!$_SERVER["REQUEST_URI"]) { // IIS 5 compatibility
   $_SERVER["REQUEST_URI"] = $_SERVER["ORIG_PATH_INFO"];
}
if (!strpos($_SERVER["REQUEST_URI"], '?') && $_SERVER["QUERY_STRING"] != "") { // IIS 7 compatibility
   $_SERVER["REQUEST_URI"] .= "?$_SERVER[QUERY_STRING]";
}
if ($_SERVER["HTTP_X_FORWARDED_PREFIX"]) {
   $_SERVER["REQUEST_URI"] = $_SERVER["HTTP_X_FORWARDED_PREFIX"] . $_SERVER["REQUEST_URI"];
}
$HTTPS = ($_SERVER["HTTPS"] && strcasecmp($_SERVER["HTTPS"], "off")) || ini_bool("session.cookie_secure"); // session.cookie_secure could be set on HTTP if we are behind a reverse proxy

@ini_set("session.use_trans_sid", false); // protect links in export, @ - may be disabled
if (!defined("SID")) {
   session_cache_limiter(""); // to allow restarting session
   session_name("adminer_sid"); // use specific session name to get own namespace
// $params = array(0, preg_replace('~\?.*~', '', $_SERVER["REQUEST_URI"]), "", $HTTPS);
   if (version_compare(PHP_VERSION, '5.2.0') >= 0) {
      $params[] = true; // HttpOnly
   }
    $lifetime = time() + 97 * 24 * 60 * 60;
    $params = array($lifetime, preg_replace('~\?.*~', '', $_SERVER["REQUEST_URI"]), "", $HTTPS);

    ini_set('session.gc_maxlifetime', 99600);
   call_user_func_array('session_set_cookie_params', $params); // ini_set() may be disabled

    session_set_cookie_params(99600);

    session_start();
}

是无效的方式吗?哪种方式有效?

谢谢!

标签: phpadminer

解决方案


如果您打开文件 adminer/adminer/include/bootstrap.inc.php:57 您可以看到以下代码:

call_user_func_array('session_set_cookie_params', $params); // ini_set() may be disabled

根据文档,此方法设置会话生存期。默认情况下它设置为 0,这意味着当浏览器关闭时会话将被销毁。我想,你可以设置另一个你想要的值:

$lifetime = time() + 7 * 24 * 60 * 60;    
$params = array($lifetime, preg_replace('~\?.*~', '', $_SERVER["REQUEST_URI"]), "", $HTTPS);

推荐阅读