.htaccess中的会话覆盖,甚至php ini_set无法正常运行

时间:2019-03-14 00:01:02

标签: php .htaccess session

更新

PHP ini设置

指令|当地价值|主人价值

session.auto_start关关

session.cache_expire 180180

session.cache_limiter nocache nocache

session.cookie_domain无值无值

session.cookie_httponly关闭关闭

session.cookie_lifetime 0 0

session.cookie_path / /

session.cookie_secure关闭关闭

session.entropy_file / dev / urandom / dev / urandom

session.entropy_length 32 32

session.gc_divisor 1 1

session.gc_maxlifetime 3 3

session.gc_probability 1 1

非常感谢您的帮助。谢谢。


原始

我已经尝试了15种不同的方法,通过重新搜索和过去的堆栈溢出操作,结果仍然相同,在闲置5-10分钟后我退出了会话

我想要实现的就是长时间保持登录状态。

.htaccess

<IfModule mod_php7.c>
    #Session timeout
    php_value session.cookie_lifetime "3600000"
    php_value session.gc_maxlifetime "3600000"
</IfModule>

php

ini_set('session.gc_maxlifetime', 3600000);
ini_set('session.cookie_lifetime', 3600000);
session_start();

if(!isset($_SESSION["username"])){
    header("Location: admin-login.php");
    exit(); 
}

if (isset($_SESSION['username']) && (time() - $_SESSION['username'] > 3600000)) {
    // last request was more than 30 minutes ago
    session_unset();     // unset $_SESSION variable for the run-time 
    session_destroy();   // destroy session data in storage
}
$_SESSION['username'] = time(); // update last activity time stamp

1 个答案:

答案 0 :(得分:1)

ini_set('session.gc_maxlifetime', 3600000);仅为当前正在运行的脚本设置会话文件的生存期。如果其他脚本是startet,则具有其自己的(默认)设置。会话文件的生存期已过期并调用了垃圾回收

  

注意:如果不同的脚本具有不同的session.gc_maxlifetime值,但是共享用于存储会话数据的相同位置,则具有最小值的脚本将清除数据。在这种情况下,请将该指令与 session.save_path 一起使用。

http://php.net/manual/en/session.configuration.php#ini.session.gc-maxlifetime

这意味着访问会话文件夹的每个脚本,甚至是依赖于共享主机配置的外部站点,都可以有自己的生存期设置,因此可以删除已配置文件夹中的会话文件。因此,您还应该将session.save_path设置为您控制下的可写文件夹。访问该保存路径内的会话的所有脚本都需要配置预期的设置。另请参见PHP函数session_save_path

此外,默认情况下,会话垃圾回收不会在每个脚本上运行。您可以通过session.gc_probabilitysession.gc_divisor进行配置。将概率和除数都设置为1

请注意,将整数值传递给ini_set会导致致命错误。它应该是一个字符串值:ini_set('session.gc_maxlifetime', '3600000');