2017-08-03 180 views
0

我只是在我的代码中使用会话变量。我不会使用Cookie开始任何活动。我只是做session_start()并对变量进行操作。 但是在一段时间(大约30分钟)结束的时候,会议进行中。如果我做print_r($ _ SESSION)会话是无效的。Php会话变量销毁此说明

我试过将session.gc_maxlifetime设置为7200(2小时),但会话在不到30分钟内就被销毁了。

我该如何解决这个问题?这是正常的?如果我关闭浏览器或将语句/指令提供给session_destroy,会不会仅销毁该会话?

+1

作为默认的生命周期是24分钟。我猜你已经改变了错误的'php.ini'文件。通常有两个用于Apache下的PHP和一个用于CLI。用'<?php phpinfo();?>'做一个快速页面,并检查你的真实'php.ini'文件的位置,并确保你正在更改正确的文件 – RiggsFolly

+0

此外,在'phpinfo()'输出,你实际上可以看到'session.gc_maxlifetime'的配置值在'session'部分下面。 – Phylogenesis

+0

的phpinfo后(): [PHP版本7.1.7], [服务器API =>的Litespeed V6.11], [加载的配置文件=> /opt/alt/php71/etc/php.ini] [解析附加的.ini文件=> /opt/alt/php71/link/conf/alt_php.ini], [session.cookie_lifetime => 0], [session.gc_maxlifetime => 7200] –

回答

0

会话变量用于保存信息,直到浏览器关闭。我不太清楚你想在你的项目中实现什么,因为你还没有发布任何代码。 一些简单的事情很简单,就像在你的PHP脚本的最后或者session_start()的开头,在任何html标签可能会混淆你的代码之前都没有放上session_write_close();

+0

我只是希望会话不会在没有指令的情况下销毁或关闭浏览器。而我所证实的是,这个会议在一段时间后没有任何指示就吹走了。考虑到我不使用cookies。我不需要任何代码来表明我的疑问。我只在每个页面中使用session_start(),并使用symply session vars来控制用户是否登录。 –

0

默认超时时间为24分钟。

除了php.ini以外,您可以在代码中进行更改。从这个答案

// server should keep session data for AT LEAST 1 hour 
ini_set('session.gc_maxlifetime', 3600); 

// each client should remember their session id for EXACTLY 1 hour 
session_set_cookie_params(3600); 

session_start(); // ready to go! 

:你可以试试这个How to change the session timeout in PHP?


的一篇文章就可以了:

https://bytes.com/topic/php/insights/889606-setting-timeout-php-sessions

这使得我已经适应到2个小时的代码。它

session_start(); 
$timeout = 7200; // Number of seconds until it times out. 

// Check if the timeout field exists. 
if(isset($_SESSION['timeout'])) { 
    // See if the number of seconds since the last 
    // visit is larger than the timeout period. 
    $duration = time() - (int)$_SESSION['timeout']; 
    if($duration > $timeout) { 
     // Destroy the session and restart it. 
     session_destroy(); 
     session_start(); 
    } 
} 

// Update the timout field with the current time. 
$_SESSION['timeout'] = time(); 

php.net页:

http://php.net/manual/en/function.session-set-cookie-params.php

其他堆栈答案进行验证(一些高评级):

PHP sessions default timeout
How do I expire a PHP session after 30 minutes?

+0

所以我必须把“ini_set('session.gc_maxlifetime',3600);”在我有session_start()的每个页面中?并在session_start()之前? 像这样:<?php ini_set('session.gc_maxlifetime',3600);在session_start(); ?> –

+0

阅读了我的最后一个链接,这里有很好的信息。具体来说,我只是简单地将它包含在你的php头文件中。 – Madivad