我有一个网站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'];
答案 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
我完全忽略了网址,这是我的一个愚蠢的错误,我对两个域名之间的差异完全失明,可能只是缺乏一般知识左右。
感谢您的快速回复。