我面对这个奇怪的问题。我有一个PHP页面,我在其中设置会话变量。然后我使用$('')加载(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个加载调用 $(&#39;#samedir&#39)的负载。(&#34; sample1.php&#34); 这个从同一目录加载并转储输出
array(1) { ["test"]=> string(5) "hello" }
而第二次调用$('#subdir').load("forms/sample1.php");
转储了这个:
array(0) { }
但是我的localhost(MAMP)中的一切正常,但我的托管服务器中没有。 谢谢你们。
答案 0 :(得分:0)
会话在服务器上的临时目录中创建一个文件,其中存储了已注册的会话变量及其值。在访问期间,该数据将可供网站上的所有页面使用。
临时文件的位置由名为session.save_path的php.ini文件中的设置确定。请仔细检查这条路。
另外[session-save-path()] [1]获取和/或设置当前会话保存路径。
我认为你不需要写这行,并检查你的php.ini是否正确。
对于会话我发现了一些有用的文章http://www.tutorialspoint.com/php/php_sessions.htm
该目录不会影响您的会话状态(给定Apache-PHP网站的所有目录将以标准配置访问同一会话)。您不必使用session_save_path()。
我认为问题部分在于你正在设置&#39; uid&#39;自己($ _SESSION [&#39; uid&#39;] = $ _SESSION [&#39; uid&#39;];) - 因此可能永远不会实际将其设置为某个值 - 并且如果它可能无限期地重定向(&#39;未设置。
我建议这个简单的测试,以确保您的会话实际上正在运作:
/session_set.php
<?php
session_start();
$_SESSION['uid'] = 123;
/sub_dir/session_get.php
<?php
session_start();
echo $_SESSION['uid'];