【问题标题】:php session fails on first attempt if server has been idle如果服务器空闲,则第一次尝试 php 会话失败
【发布时间】:2012-11-02 12:50:00
【问题描述】:

由于某种原因,如果服务器空闲了一段时间,例如几个小时,第一次登录尝试将失败。

会发生这样的事情:

  1. 用户导航到登录脚本
  2. 脚本设置会话变量并重定向到主页
  3. 主页应该能够读取会话变量(但在这种情况下会失败)

PHP 错误日志中没有备注,第二次尝试正常。它仅发生在第一个用户在空闲期后访问该页面。例如,如果另一个用户在 5 秒后尝试登录,则一切正常。

这是在带有 PHP 5.3 的 IIS7 上使用 FastCGI。

任何想法这里出了什么问题或我可以做些什么来找到解决方案?

这就是脚本的大致设置方式 登录.php:

@session_start();
$_SESSION['userid'] = $userid;
session_write_close();
session_unset();
usleep(200000);     
header('Location:index.php');

主脚本

session_start();
if (isset($_SESSION['userid'])) {
   // Login successful
}

【问题讨论】:

  • 我只能说,检查你的代码。如果您可以粘贴您的代码,我们可以为您检查。
  • 我同意@AbhishekSaha。但据我所知,您可能想检查您的会话是否在您需要会话的每个页面上与session_start(); 一致地正确启动。

标签: php session


【解决方案1】:

删除三行。

session_write_close();
session_unset();
sleep(200000); 

【讨论】:

  • 谢谢,我试试看。您是否有关于为什么这些行会导致问题以及为什么只在第一次登录尝试时出现问题的理论?
  • 好吧,session_write_close 不允许您编写更多会话。取消设置将删除所有会话变量。睡眠有效,但您需要谨慎使用。我正在用手机打字,所以无法解释一切。晚上再详细写。
猜你喜欢
  • 2021-07-09
  • 2017-03-02
  • 2014-05-27
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
  • 2013-12-07
  • 2022-11-17
  • 1970-01-01
相关资源
最近更新 更多