4

我知道这可能是一个重复的问题,但我似乎无法找到我的具体问题的答案。

我有 3 个 PHP 文件。signin.php 获取用户数据并将其传递给 signin_auth.php。

signin.php 然后在成功登录后重定向到 mytoolkit.php。

signin_auth.php 在 PHP 脚本的最后使用以下代码:

<?
session_start();

$_SESSION['sessionID'] = $id;
$_SESSION['time'] = time();

header ("Location: mytoolkit.php");
exit;

?>

然后,用户被重定向到 mytoolkit.php,它使用以下代码:

<?

session_start();

if (!isset($_SESSION['sessionID'])) {

    header('Location: signin.php?message=4');
        exit;

}

$inactive = 5400;
$session_life = time() - $_SESSION['time'];

if ($session_life > $inactive) { 

   session_destroy(); 
   header("Location: signin.php?message=5"); 
   exit;

}

?>

会话变量未存储,mytoolkit.php 不断将我重定向到 signin.php?message=4

大概是个愚蠢的错误。我只是看着它太久了。

更新 -

所以我有几个服务器。两者都在 iPage 上。我将整个文件夹移动到不同的服务器(abc.com/toolkit 现在复制到 xyz.com/toolkit) 该应用程序在 xyz.com 上完美运行......它是第一个给我问题的服务器。

两者都在同一家托管公司上运行。我不知道该怎么办。

4

5 回答 5

4

I finally figured it out... It was an issues with my php.ini file on iPage's server. For some reason, they had it set to

session.save_path = "/var/php_sessions"

Where it should be my document root. That's not the first time they've messed stuff up.

于 2013-05-09T17:08:10.027 回答
1

如果您没有使用session_destroy();beforeif (!isset($_SESSION['sessionID'])) {语句破坏会话,则原因可能是$idnull 值。

于 2013-05-08T21:33:27.930 回答
0

我认为这是你的问题

  $inactive = 5400;
  $session_life = time() - $_SESSION['time'];
  if ($session_life > $inactive) { 
       session_destroy(); 
       header("Location: signin.php?message=5"); 
       exit;
  }
于 2013-05-08T21:18:10.693 回答
0

如果您header('location: example.com')在脚本中使用 a ,它将向您的浏览器发送 302 重定向。现在这不是永久的,但一些浏览器仍然缓存这个结果。谷歌一下

所以很可能是您的浏览器在访问您的代码之前就重定向了您的请求。尝试更改signin_auth.phpheader ("Location: mytoolkit.php?t=".time());然后调用附加了一些随机参数的页面,以防止第一页缓存。例如:/signin_auth.php?t=random

于 2013-05-08T21:30:55.500 回答
0

我以另一个用户(不是 apache)的身份运行 httpd。在检查 /etc/php.ini 时,我发现“会话目录必须由进程所有者拥有”。所以在 /etc/httpd/conf.d/php.conf 我改变了以下内容:

php_value session.save_path    "/var/lib/php/session"
php_value soap.wsdl_cache_dir  "/var/lib/php/wsdlcache"

php_value session.save_path    "/home/[httpduser]/php/session"
php_value soap.wsdl_cache_dir  "/home/[httpduser]/php/wsdlcache"

并重新加载httpd。

不确定将 /var/lib/php 的所有者更改为 [httpduser] 是否更好

于 2016-06-20T07:08:46.743 回答