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

时间:2015-01-07 07:28:38

标签: php session session-variables

我有一个网站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>";

    }


}

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

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

echo $_SESSION['admin'];

3 个答案:

答案 0 :(得分:0)

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

例如:

session_start();

$_SESSION['test'] = 'my test';

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

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

答案 1 :(得分:0)

这是错误的:

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

只是

session_start();

在开头的每个页面上

答案 2 :(得分:0)

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

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

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

会话存储在名为

的域中
www.samplewebsite.com

当我尝试从

访问会话时
samplewebsite.com/sample.php

哪些会话基于域

samplewebsite.com

我完全忽略了网址,这是我的一个愚蠢的错误,我对两个域名之间的差异完全失明,可能只是缺乏一般知识左右。

感谢您的快速回复。