会话在PHP脚本上结束时是否可以运行函数?我的脚本会问几个问题,用户有30分钟的回答时间或会话过期。我希望我的脚本将任何进度保存到.txt文件如果会话过期并且用户尚未完成所有答案。我该怎么做呢?
我听说过register_shutdown_function('shutdown');但我很困惑我会在我的脚本中将其称为何处。
我当前的脚本是这样开始的:
ini_set('session.gc_maxlifetime',1800);
ini_set('session.gc_probability',1);
ini_set('session.gc_divisor',1);
session_start();
if($_SESSION['loggedin'] !== 1) {//checks to see if user has logged in
header('Location: login.php');
exit;}
...asks a bunch of questions....
session_destroy();
感谢您的帮助。
答案 0 :(得分:3)
您实际上有两个选择:
保存进度(每次回答后)并保存信息是否已完成。即使浏览器已关闭,此解决方案仍然有效(进度实时保存)。
使用AJAX每个例如调用服务器。 5秒钟,服务器应返回会话是否结束的信息。如果会话结束,那么在JS中做你需要的东西(甚至重定向到不同的页面)。此解决方案无法确保保存进度(在执行操作之前可能会关闭浏览器)。
您可以根据需要和应用程序的工作方式组合这两个选项。
如果页面在每个答案后重新加载(例如重新加载以显示下一个问题),那么您可以使用选项号。 1 即可。如果所有问题都在一个页面上,请选择选项号。 2 即可。如果您的应用程序是两者的组合,您可以选择这两个选项。
修改强>
根据您的代码判断,您正在混合:
最好的想法是将两者分开。为PHP会话提供更大的时间限制,因为它需要一些其他的东西,比如实际显示进度甚至保存进度。相反,标记测试开始的时间并将其存储在PHP会话中。这样,在测试时间结束后,您将能够确定并忽略之后回答的任何问题。
答案 1 :(得分:1)