PHP - 在其他页面上无法访问会话


PHP - Session inaccessible on other pages

我有一个网站 samplewebsite.com,登录功能和会话工作正常。

现在,我正在创建一个新页面,涉及在登录页面开始的会话,该页面位于 samplewebsite.com/sample.php。该文件目前仅包含以下代码。

session_start();
if(isset($_SESSION)){
print_r($_SESSION);
}

这将输出一个空数组。当我检查Chrome的开发人员工具时,Cookie选项卡包含一个PHPSESSID,我认为这意味着会话实际上已经启动。

我非常沮丧,为什么在我 samplewebsite.com 登录并且会话被正确拾取,而在 samplewebsite.com/sample.php 我根本无法获得我需要的会话。

服务器的会话配置中是否存在某种错误?可能出了什么问题或此问题的可能原因是什么?

编辑:

这是我登录文件的一个片段。

include "db.php";
if (!isset($_SESSION)){session_start(); }   
if (isset($_SESSION['admin'])){header("Location: /"); }
if(isset($_POST['submit'])){
    $query = mysql_query("Select * from users where `username`='".mysql_real_escape_string($_POST['username'])."' and `password`='".md5(mysql_real_escape_string($_POST['password']))."'");
    if(mysql_num_rows($query) > 0 ){
        $row = mysql_fetch_assoc($query);
        $_SESSION['admin'] = $row['ID'];
        header("Location: /"); exit();

    }
    else{
        echo "<script>alert('Account Invalid')</script>";
    }

}

会话已被初始化,因为如果没有,我将被重定向到登录页面(因为索引上的重定向功能.php如果未设置 $_SESSION['admin'],则重定向到登录)。这是通过在 chrome 的开发工具上手动删除会话来测试的,刷新页面将带我进入登录页面。

所以我已登录并看到我的会话正在处理 samplewebsite.com,但是在 samplewebsite.com/sample.php 的另一个选项卡上,当我尝试时,我无法回显$ _SESSION['admin']

echo $_SESSION['admin'];

默认情况下,SESSION 数组为空,您必须初始化变量。

例如:

session_start();
$_SESSION['test'] = 'my test';
if(isset($_SESSION)){
print_r($_SESSION);
}

然后你会看到"我的测试"输出。
不要忘记在每个 php 页面中初始化会话以便能够访问您的变量。

这是

错误的:

if (!isset($_SESSION)){session_start(); } 

session_start();

在开头的每个页面上

虽然这可能不是一个合适的答案,但我现在知道为什么我不能接听会议了。

当我查看chrome的开发工具的Cookie选项卡时。我注意到会话存储在不同的域中。可能是因为我登录了

http://www.samplewebsite.com/login.php

会话存储在名为

www.samplewebsite.com

当我尝试从以下位置访问会话时

samplewebsite.com/sample.php

其会话基于域

samplewebsite.com

我完全忽略了URL,这是我的一个愚蠢的错误,我对两个域之间的差异完全视而不见,也许只是缺乏一般知识。

感谢您的快速回复。