我有一个基于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将不可用
我该如何解决这种情况?我可以从加载的页面访问会话数组而无需启动会话吗?
答案 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()