Php 会话只在99%的时间有效
我又在尝试一个困扰我多年的问题。我和其他人一样,为登录用户使用会话。对于新用户,我创建一个新的db条目,然后检索新创建的UserID键,对于现有用户,我从表中检索该键。在任何一种情况下,我都会捕获读/写错误,以便在进入下一个代码部分时知道已设置了$UserID。这很简单:Php 会话只在99%的时间有效,php,session,Php,Session,我又在尝试一个困扰我多年的问题。我和其他人一样,为登录用户使用会话。对于新用户,我创建一个新的db条目,然后检索新创建的UserID键,对于现有用户,我从表中检索该键。在任何一种情况下,我都会捕获读/写错误,以便在进入下一个代码部分时知道已设置了$UserID。这很简单: if (!isset($_SESSION)) { session_start(); } $_SESSION['User'] = $UserID; /* Proceed to next page */ 当我进入下一页
if (!isset($_SESSION)) {
session_start();
}
$_SESSION['User'] = $UserID;
/* Proceed to next page */
当我进入下一页时,我做的第一件事是:
if (! isset($_SESSION)) session_start();
if (! isset($_SESSION['UserID'])) kickoutTo("SessionCheck.php");
让我发疯的是,可能有1%的时间,我会被重定向。(SessionCheck.php是我专门为这个问题制作的一个页面,用来收集这些不幸用户的反馈。)
现在我只能想象不创建会话的两个原因:
Session Support enabled
Registered save handlers files user sqlite
Registered serializer handlers php php_binary
Directive Local Value Master Value
session.auto_start Off Off
session.bug_compat_42 On On
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_httponly Off Off
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 10000 10000
session.gc_maxlifetime 18000 18000
session.gc_probability 1 1
session.hash_bits_per_character 4 4
session.hash_function 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /tmp /tmp
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies On On
session.use_trans_sid 0 0
这是怎么回事?我在哪里看?我可以测试什么?这已经发生了很多年,在这期间,我甚至在同一家主机公司内更换了服务器。非常感谢您的解答。也许他们会打开页面,让它停留30分钟,然后单击一个链接,因为会话已过期而被重定向到登录页面。用户通常不理解,如果您只是让页面处于静止状态而不进行导航,会话将过期。缓存过期设置为3小时。。。会话缓存在3小时后无效,因此它们将被引导出去。更改php.ini中的值并重新启动apache/fpm。我也会每隔8小时进行垃圾清理,并在6小时后手动要求登录,但这不是需要过期的成功会话的问题。它在没有用户交互的情况下立即发生。登录页面处理它们,然后直接重定向到无法识别其会话的欢迎页面。相隔一秒。所以我会提高缓存时间,但我不认为这是相关的。