PHP Session不在子目录中工作

时间:2015-04-20 07:28:39

标签: javascript php jquery html session

我面对这个奇怪的问题。我有一个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)中的一切正常,但我的托管服务器中没有。 谢谢你们。

1 个答案:

答案 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'];