我遇到了PHP会话丢弃数据并重定向回登录页面的问题。
这是我从顶部开始的目录结构:
在登录目录中: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中的包含的页面,我会被重定向到我的登录页面。
有什么想法吗?
答案 0 :(得分:0)
您需要始终包含会话开始。一个好的方法是创建一个header.php或bootstrap.php或类似的,你可以include_once在每个依赖于会话的扩展文件的开头。然后,除了正常工作之外,您的代码将变得更清晰,更易于管理。
答案 1 :(得分:0)
我已经解决了这个问题,并且无法相信我的白痴。
在其中一个包含我回复到另一个页面的链接的包含中,这是错误的,实际上一直指向我的登录页面。现在一切都很好,感谢所有的帮助。典型的男生错误。