我知道这可能是一个重复的问题,但我似乎无法找到我的具体问题的答案。
我有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上完美运行...它是第一台给我一些问题的服务器。
两者都在同一家托管公司上运行。我不知道该怎么做。
答案 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]
是否更好