【发布时间】:2014-12-01 20:12:12
【问题描述】:
我有一个用户登录并设置了一些会话变量的页面:
$_SESSION['username'] = "Bob Smith";
$_SESSION['company'] = "acme Co";
$_SESSION['someData'] = "yes";
到目前为止一切顺利。
现在用户位于landing.php,我在左侧有一系列链接供用户导航。
<li class='menu' id='createUser'>Create New user</li>
<li class='menu' id='modUser'>Modify User</li>
<li class='menu' id='reports'>Reports</li>
<li class='menu' id='api'>API Management</li>
<li class='menu' id='logout'>Logout</li>
和用于导航的 jquery:
$('.menu,.menu2').click(function(){
var action = $(this).attr('id');
$.ajax({
type: "POST",
url: "admin.php",
data: "action="+action,
success: function(result){
$('#modData').html(result);
}
});
admin.php 返回包含 var 操作的 php 页面。因此 modUser.php 或 reports.php 等返回不同的表单和数据。
现在。奇怪的事情我想不通。当我点击任何链接时。我的会话变量仍然设置。当我再次单击任何链接(注销除外)时,所有会话变量数据都消失了。除了 logout.php 之外,我在任何地方都没有 session_destroy
print_r($_SESSION) 在任何这些页面上仅第一次显示变量....第二次单击我得到结果
Array()
我可能在每个页面上都有 session_start()。
我知道这是一个远景,您可能需要更多信息,但是这里有什么我遗漏的固有错误导致会话数据被删除。
admin.php
<?php
session_start();
if ($_POST['action'] == "reports")
{
include('reports.php');
}
if ($_POST['action'] == "logout");{
include('logout.php');
}
if ($_POST['action'] == "api"){
include('apiMgmt.php');
}
?>
【问题讨论】:
-
检查每个页面上的
session_id()。如果值发生变化,那么您将丢失会话 cookie 并获得新/空会话。会话不太可能被破坏,只是被放弃了。通常这是 cookie 设置问题。 -
域始终保持不变?至少尝试了两种浏览器
-
似乎您的问题可能在某个地方的 admin.php 中。也许你应该把那个贴出来。
-
会话 ID 保持不变。现在将 admin.php 信息添加到问题中。
-
“当我再次点击任何链接(注销除外)时,所有会话变量数据都消失了。”你写对了吗?听起来您在注销位中混淆了逻辑...所以它总是注销而不是仅注销?