PHP会话丢失了

时间:2013-04-27 23:30:58

标签: php session session-variables

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

这是我从顶部开始的目录结构:


  1. 登录//包含要登录/注销的文件
  2. Main //包含登录用户的页面
  3. index.php //具有完全可操作形式的登录屏幕
  4. 在登录目录中:check_login.php

    在主目录中:page1.php,folder1和folder2

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

    在文件夹2中:include2.php

    (对不起,如果这不是很容易理解)


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

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

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

    在page1.php的顶部:

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

    从page1.php,如果我导航到包含位于folder1中的包含的页面,这可以正常工作。如果我导航回到家,也包含在folder1中,这样可以正常工作。两次我都可以从session中读取id变量。

    但是,如果我导航到包含位于folder2中的包含的页面,我会被重定向到我的登录页面。

    有什么想法吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我已经解决了这个问题,并且无法相信我的白痴。

在其中一个包含我回复到另一个页面的链接的包含中,这是错误的,实际上一直指向我的登录页面。现在一切都很好,感谢所有的帮助。典型的男生错误。