页面间没有保存的PHP会话变量
我知道这可能是一个重复的问题,但我似乎无法找到我的具体问题的答案。页面间没有保存的PHP会话变量
我有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消息= 4
可能是一个愚蠢的错误。我刚刚看了太久。
UPDATE -
所以我有几台服务器。在iPage上。我将整个文件夹移到了不同的服务器上(abc.com/toolkit现在已经复制到xyz.com/toolkit)该应用程序在xyz.com上运行得非常好......它是第一个为我提供了问题的服务器。
这两个都运行在同一托管公司。我不知道该怎么做。
我觉得这是你的问题
$inactive = 5400;
$session_life = time() - $_SESSION['time'];
if ($session_life > $inactive) {
session_destroy();
header("Location: signin.php?message=5");
exit;
}
我完全拿出来,仍然失败。尽管感谢您的帮助! – 2013-05-08 22:09:07
如果您在脚本中使用header('location: example.com')
它发送302重定向到浏览器。现在这不是永久的,但有些浏览器仍然缓存这个结果。只需google it
因此,它很可能是您的浏览器在您访问您的代码之前重定向您的请求。尝试更改signin_auth.php
至header ("Location: mytoolkit.php?t=".time());
,然后使用附加的一些随机参数调用页面,以防止第一页缓存。 EG:/signin_auth.php?t=random
感谢雨果 - 我认为这样会工作,但仍然失败 – 2013-05-08 22:09:25
如果您没有在if (!isset($_SESSION['sessionID'])) {
声明之前销毁与session_destroy();
的会话,那么原因可能是$id
具有空值。
'session_destroy();'不是一个好主意,除非你确定你在做什么。 – 2014-04-06 22:20:24
我终于明白了......这是iPage服务器上我的php.ini
文件的问题。出于某种原因,他们将其设置为
session.save_path = "/var/php_sessions"
它应该是我的文档根目录。这不是他们第一次搞砸了。
如果我正确地阅读了这个[php文档页面](http://www.php.net/session.configuration),'session.save_path'应该默认为'“”'我的本地计算机上的'' – dsdsdsdsd 2013-12-10 16:57:26
(php 5.3), 'session.save_path =“C:\ SERVER \ tmp”',但在我的虚拟主机上它和Sean的一样:'session.save_path =“/ var/php_sessions”'......将它改为'“” '工作。 – dsdsdsdsd 2013-12-10 16:59:11
这是错误信息!您不希望将您的会话存储在文档根目录中。除非文件权限正确,否则它会公开公开所有会话。 – geekdenz 2016-12-02 08:06:32
我正在运行httpd作为另一个用户(不是apache)。在检查/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]
为什么您使用session_life和非活动破坏的会话,你没有让PHP杀它本身当它是无效的X时间,你可以在php.ini中设置?? – CodeBird 2013-05-08 21:09:11
你说在sign auth的最后是会话代码,你是在输出html还是空白行之前? – 2013-05-08 21:11:00
@on_,我会问同样的事情;代码到页面的最后,'session_start()'不能一起走,和前面的空格一起走。 – 2013-05-08 21:13:45