我有一个用户登录的页面,并设置了一些会话变量:
$_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 action的php页面的include。所以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');
}
&GT;
答案 0 :(得分:1)
您可能遇到的一个问题是admin.php的include部分。虽然你想让session_start()几乎总是在每个新文件的开头,但是include部分只是将代码附加到登陆php文件,在一个“大”文件中有多个会话启动。
你可以解决这个问题的一种方法是在每个'子'php文件中,让会话开始写为 -
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
这适用于PHP 5.4及更高版本。对于早期版本,请使用
if (session_id() == '') {
session_start();
}
答案 1 :(得分:1)
<?php
session_start();
if ($_POST['action'] == "reports")
{
include('reports.php');
}
if ($_POST['action'] == "logout");{ <------
include('logout.php');
}
if ($_POST['action'] == "api"){
include('apiMgmt.php');
}
删除注销中的分号if if语句修复问题。