PHP会话变量不在页面之间保存

时间:2013-05-08 21:05:26

标签: php session-variables

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

我有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上完美运行...它是第一台给我一些问题的服务器。

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

5 个答案:

答案 0 :(得分:4)

我终于明白了......这是iPage服务器上php.ini文件的问题。出于某种原因,他们将其设置为

session.save_path = "/var/php_sessions"

它应该是我的文档根目录。这不是他们第一次搞砸了。

答案 1 :(得分:1)

如果您在session_destroy();语句之前没有销毁if (!isset($_SESSION['sessionID'])) {的会话,那么原因可能是$id具有空值。

答案 2 :(得分:0)

我认为这是你的问题

  $inactive = 5400;
  $session_life = time() - $_SESSION['time'];
  if ($session_life > $inactive) { 
       session_destroy(); 
       header("Location: signin.php?message=5"); 
       exit;
  }

答案 3 :(得分:0)

如果您在脚本中使用header('location: example.com'),则会向浏览器发送302重定向。现在这不是永久性的,但有些浏览器仍会缓存此结果。只需google it

因此,很可能您的浏览器在访问您的代码之前重定向您的请求。尝试将signin_auth.php更改为header ("Location: mytoolkit.php?t=".time());,然后使用附加的随机参数调用该页面,以防止第一页缓存。 EG:/signin_auth.php?t=random

答案 4 :(得分:0)

我作为另一个用户(不是apache)运行httpd。在检查/etc/php.ini时,我发现&#34;会话目录必须由进程所有者&#34;拥有。所以在/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]

是否更好