>我有一个基于index.php
页面的单页应用程序,我在其中启动会话并显示第一个内容。然后,我根据单击的链接通过 Ajax 加载不同div 中的内容。
如果我想访问加载页面中的$_SESSION
数组(例如显示用户名),我也需要session_start
放入通过 Ajax 加载的页面中。一切都以这种方式工作正常,但是当我看到日志时,我看到每次通过Ajax加载其中一个页面时,php都会抛出错误,说
"会话已开始。忽略session_start()"。
所以:一方面我需要放session_start来访问会话数组,但另一方面,session_start命令被忽略。
从索引.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 将不可用
如何解决这种情况?我可以在不启动会话的情况下从加载的页面访问会话数组吗?
最好使用此行而不是session_start()
。您可能有多个session_start,并在这两者之间使用会话。
if(session_id() == '') {
session_start();
}
如果您在本地 WAMP 或 Xamp 环境中进行测试,我建议您清除缓存,关闭浏览器(不是单个选项卡)并运行您的应用程序。
试试这个 1:
<?php
if(!isset($_SESSION))
{
session_start();
}
?>
或
2:如果你有php>=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();
}
希望这有帮助..
将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() 移到顶部。 另请注意,这应该是索引中的第一个语句.php
或在索引的页面顶部插入下面的代码.php
<?php
session_start();
?>
并删除索引中的另一个session_start(.php