【发布时间】:2015-06-26 19:28:50
【问题描述】:
我面临这个奇怪的问题。我有一个 PHP 页面,我在其中设置了会话变量。然后我使用 $('').load(URL); 将另一个页面加载到此页面的 DIV 标记中;但是正在加载的页面不保留会话并在加载后立即销毁当前页面。但是,如果会话与主页面保持在同一目录中,则同一页面会保留会话。
我看到了一个类似的问题here。但它没有提供任何解决方案。
这是我的代码 主页:sample.php
<?php
session_start();
echo session_id();
echo "<br>";
$_SESSION['test'] = "hello";
var_dump($_SESSION);
echo "<br>";
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<?php
echo $_SESSION["test"];
?>
<div id="samedir" style="border: 1px solid #000;">
</div>
<br>
<div id="subdir" style="border: 1px solid #000;">
</div>
<input type="button" value="hello" id="hellobtn"/>
<script type="text/javascript" src="js/jquery-1.11.0.js"></script>
<script>
$('#hellobtn').click(function() {
$('#samedir').load("sample1.php");
$('#subdir').load("forms/sample1.php");
});
</script>
</body>
</html>
第二页:sample1.php
<?php
ob_start();
if(!isset($_SESSION))
session_start();
echo session_id();
echo "<br>";
var_dump($_SESSION);
ob_flush();
?>
您可以在这里看到我在主页中有 2 个加载调用 $('#samedir').load("sample1.php"); 这个从同一目录加载并转储输出
array(1) { ["test"]=> string(5) "hello" }
而第二个电话 $('#subdir').load("forms/sample1.php"); 转储了这个:
array(0) { }
但是在我的本地主机 (MAMP) 中一切正常,但在我的托管服务器中却不行。 谢谢各位。
【问题讨论】:
-
如果您只在 sample1.php 上执行 if 语句 + echo $_session['test'] 会怎样?
-
php 开头标签前的一些空格/换行符?您应该启用错误显示并检查
session_start()的返回值。另外,您的输出似乎与脚本不匹配,会话 ID 在哪里? -
sample1.php:session_start();在任何条件下.. 不仅是if(!isset($_SESSION)).. -
@jeroen 嗨,我在此处粘贴时没有复制会话 ID。但它符合预期。 sample.php: b1646cb8ab5190c1c55dc42a4b83f76e array(1) { ["test"]=> string(5) "hello" } hello b1646cb8ab5190c1c55dc42a4b83f76e array(1) { ["test"]=> string(5) "hello" } b1646cb8ab5190c1c5dc 0) { }
-
@SyedQarib 嗨,我在签入另一个 stackoverflow 页面后遇到了这种情况。无论我是否使用条件,它都会给出相同的结果。
标签: javascript php jquery html session