Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-会话被随机破坏_Php_.htaccess_Session_Garbage Collection - Fatal编程技术网

PHP-会话被随机破坏

PHP-会话被随机破坏,php,.htaccess,session,garbage-collection,Php,.htaccess,Session,Garbage Collection,我使用以下几行代码激活PHP中的会话: session_name("DELogin"); session_set_cookie_params((60*60*24*14), "/", ".myweb.com"); session_start(); 但是,会话在设置的过期时间(甚至浏览器会话)之前随机停止工作(看起来)。 如你所见,它应该持续2周。 是否有一些设置需要更改 我没有访问php.ini的权限,但我可以通过.htaccess(对吗?)更改这些设置。 我看到了session.gc\u pr

我使用以下几行代码激活PHP中的会话:

session_name("DELogin");
session_set_cookie_params((60*60*24*14), "/", ".myweb.com");
session_start();
但是,会话在设置的过期时间(甚至浏览器会话)之前随机停止工作(看起来)。 如你所见,它应该持续2周。 是否有一些设置需要更改

我没有访问php.ini的权限,但我可以通过.htaccess(对吗?)更改这些设置。 我看到了
session.gc\u probability
session.gc\u divisior
session.gc\u maxlife
,但我认为它应该可以在不改变这些设置的情况下工作。(如果我要修改这些,请回复)

提前谢谢

编辑: 我试过尤金·里克和丹·沃克的建议,但都没有用。 我在.htaccess文件中设置了这些设置,因此我不必在每个页面上都包含这些设置:

php_value session.gc_maxlifetime 1209600
php_value session.cookie_lifetime 1209600

php_value session.cookie_domain ".mydomain.com"
php_value session.name "DELogin"
php_value session.auto_start 1
然而,经过一段时间后,它仍然被“清除”。(调查导致发现会话仍然存在,但对
$\u session['id']
的测试结果为false,当用户未登录时应为false)。 因此,要么将
$\u会话['id']
更改为false,要么删除该会话并使用
$\u会话['id']
false自动(重新)生成该会话


我该怎么办?

您是否尝试过设置会话cookie生存期变量

ini_集(“session.cookie_life”,“3600”)//一小时

此外,您还可以通过创建名为phpinfo.PHP的文件并在其中弹出以下内容来检查PHP.ini文件中设置了哪些设置:


并浏览到它。

要使会话正常工作,它必须在服务器和客户端的两侧都有效。cookie参数只应用于客户端,因此服务器端由标准PHP清理机制处理。您需要研究的参数是

如何确定会话停止工作?代码中是否还有其他地方调用了
会话\u start
或类似的东西,可能会重置会话?@BotskoNet嗯,据我所知不是这样。只有当用户注销他/她自己时,它才会破坏会话(我敢肯定,只有当用户注销时才会调用它)。根据您最近的后期更新,会话不会使用相同的密钥重新创建,因此,
$\u session['id']
失去其价值是一个问题。在可能触及该值的所有对象附近运行一些调试语句,并找出可能会改变它的内容。@BotskoNet好的,我会的,但“使用相同的键重新创建”是什么意思?我没说它是用相同的键重新创建的。我所能看到的是cookie仍然在那里,但这是合乎逻辑的,因为它应该在
session.auto_start
设置为
1
@BotskoNet,但我没有找到任何东西。问题是,当我登录并将其保留在第页(我们称之为A)时,我可以无限地刷新它,而不会破坏会话并因此注销。但是,如果我将计算机留在A页上超过一个小时,然后刷新它(显然我的会话已被破坏),然后我就注销了。正如其他人所说,我会尝试使用print\r或var\u dump非常小心地调试您的代码。