PHP会话丢失

问题描述:

我遇到了PHP会话丢弃数据并重定向回我的登录页面的问题。PHP会话丢失

这是目录结构我从顶部有:


  1. 登录//包含文件的登录/退出
  2. 主要//包含页登录用户
  3. 指数。 php //完全操作形式的登录屏幕

在登录目录中:check_login.php

在主目录:page1.php中,文件夹1和文件夹2

在文件夹1:home.php,include1.php

在文件夹2:include2.php

(如果这不是很抱歉很容易理解)


这是我对check_login.php登录时运行这些代码:

session_start(); 
$_SESSION["id"] = $id; 
header("location:../main/page1.php"); //into main directory 

的所有页面都包含相同样式(标题,导航和页脚)以及具有每页所以因此我使用包括包含在根据内容文件夹1和文件夹2所显示的变化一个主要内容块。默认情况下,home.php包含在位于folder1中的主页中。其他页面使用包括include1.php或include2.php,它们可以来自任一文件夹。

在page1.php中的顶部:

session_start(); 
if($_SESSION["id"] == '') 
{ 
header("location:../index.php"); 
} 

从page1.php中,如果我浏览到一个页面,其中一个包括位于folder1中,能正常工作。如果我导航回家,一个包括也在folder1这工作正常。两次我都可以从会话中读取id变量。

但是,如果我浏览到的网页与包括位于文件夹2我重定向到我的登录页面。

任何想法?

+0

如果我理解正确,问题可能是您重定向到文件夹2时没有声明“session_start()” – Yaakov 2013-04-27 23:37:02

+0

我可以在其中切换的文件夹1中的包含没有session_start();在顶部,这工作正常。文件夹2也没有。不过,我已经尝试把session_start();在所有包含这两个文件夹的顶部,仍然是同样的问题。 – Matteth13 2013-04-27 23:39:30

+0

“index.php”包含什么? – Yaakov 2013-04-27 23:41:42

你需要总是包括您的会话开始。一个好的方法是创建一个header.php或bootstrap.php或类似的文件,你可以在依赖会话的每个扩展文件的开头添加include_once。然后,您的代码将变得更清洁,更易于管理,除了正常工作。

+0

我试过这个,它仍然不起作用。 – Matteth13 2013-04-27 23:44:37

+0

也许这个问题不在你的PHP代码中,而是在于你的浏览器刷新会话或服务器没有正确地保存会话。你的软件堆栈是什么样的? – 2013-04-27 23:54:39

+0

那么服务器必须正确保存会话,因为它允许我在包含在同一个目录之间移动。 你是什么意思的软件堆栈? – Matteth13 2013-04-27 23:58:48

我已经解决了这一点,并不能相信我的白痴。

在的包括我在那里呼应链接到其他网页之一,这是错误的,实际上是指向我的登录页面一直。现在一切正常,感谢所有的帮助。典型的小学生错误。