单页面应用程序session_start错误通知

时间:2016-04-22 15:16:59

标签: php ajax session

我有一个基于index.php页面的单页面应用程序,我开始会话并显示第一个内容。然后我根据点击的链接通过不同div中的Ajax内容加载。

如果我想访问加载页面中的$_SESSION数组(例如显示用户名),我需要将session_start放在我通过Ajax加载的页面中。 一切都运行良好,但是当我看到日志时,我发现每次通过Ajax加载其中一个页面时,php都会抛出错误

  

“会话已经开始。忽略session_start()”。

所以:一方面我需要把session_start用来访问会话数组,但另一方面我会忽略session_start命令。

来自index.php:

<?php
require '../session_handler.inc.php';
require 'global_functions.php';
session_start();
if(isset($_SESSION['id1'])){
    $actusr=$_SESSION['id1'];
}

ajax调用示例:

function loadContent(sourceUrl){
    $(".container").load(sourceUrl);
}

我需要在被调用页面上使用的php:

<?php 
require '../../session_handler.inc.php';
require '../global_functions.php';
session_start();

如果我删除session_start(),$ _SESSION将不可用

我该如何解决这种情况?我可以从加载的页面访问会话数组而无需启动会话吗?

3 个答案:

答案 0 :(得分:0)

最好使用此行代替session_start()。 你可能有多个session_start并使用这两者之间的会话。

if(session_id() == '') {
    session_start();
}

答案 1 :(得分:0)

如果您在本地WAMP或Xamp环境中进行测试,我建议您清除缓存,关闭浏览器(不是单个选项卡)并运行您的应用。

试试这个1:

 <?php
        if(!isset($_SESSION)) 
        { 
            session_start(); 
        } 
    ?>

2:如果你有php&gt; = 5.4.0,最好使用它:

$status = session_status();
if($status == PHP_SESSION_NONE){
    //There is no active session
    session_start();

}else
if($status == PHP_SESSION_ACTIVE){
    //Destroy current and start new one
    session_destroy();
    session_start();
}

希望这会有所帮助..

答案 2 :(得分:0)

move session_start();到页面顶部

<?php
session_start();
require '../session_handler.inc.php';
require 'global_functions.php';
if(isset($_SESSION['id1'])){
    $actusr=$_SESSION['id1'];
}

session_handler.inc.php或global_functions.php可能已经包含session_start(),因此将index.php的session_start()移到顶部。另请注意,这应该是index.php

中的第一个语句

或在index.php的页面顶部插入以下代码

<?php
session_start();
?>

并删除index.php中的其他session_start()