gpt4 book ai didi

php - session 过期时运行函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:39:40 25 4
gpt4 key购买 nike

是否可以在 PHP 脚本上结束 session 时运行函数?我的脚本问了几个问题,用户有 30 分钟的时间回答,否则 session 就会过期。我希望我的脚本将任何进度保存到 .txt 文件如果 session 过期并且用户没有完成所有答案。我该怎么做呢?

我听说过 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();

感谢您的帮助。

最佳答案

您实际上有两个选择:

  1. 在发生时(每次回答后)保存进度,并保存是否已完成的信息。此解决方案即使浏览器已关闭也有效(实时保存进度)。

  2. 使用 AJAX 调用服务器,例如。 5 秒,服务器应返回 session 是否结束的信息。如果 session 结束,则在 JS 中执行您需要的操作(甚至重定向到不同的页面)。此解决方案不能确保保存进度(浏览器可能会在执行操作之前关闭)。

您可以结合使用这两个选项,具体取决于您的需要和应用程序的工作方式。

如果页面在每次回答后重新加载(例如重新加载以显示下一个问题),那么您可以使用选项号。 1。如果所有问题都在一页上,请选择选项号。 2 。如果您的应用程序是两者的结合,您可以选择这两个选项。

编辑:

从您的代码来看,您正在混合:

  • session 回答问题的时间
  • session 在 PHP 页面请求之间存储值

最好的办法是将两者分开。给 PHP session 一个更大的时间限制,因为一些其他事情需要它,比如实际显示进度甚至保存进度。相反,标记测试开始的时间并将其存储在 PHP session 中。这样,在测试时间用完后,您将能够确定并忽略之后回答的任何问题。

关于php - session 过期时运行函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8060200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com