【问题标题】:External php file that is loaded into index.php with .load() method not recognising $_SESSION variables使用 .load() 方法加载到 index.php 的外部 php 文件无法识别 $_SESSION 变量
【发布时间】:2017-10-25 14:16:56
【问题描述】:

所以我的主页通过单击按钮将其他 php 页面加载到其中,因此它可以是一个单页网站,而无需一次加载所有内容。

index.php

<?php 
session_start();
?>
<head>
$('#btnPetShop').one( "click", function(){
            $( "#page_shop" ).load( "shop.php" );
        });
</head>
<body>
<?php
echo session_status();/----Always returns 1, no matter if logged in or not----/
if(isset($_SESSION['admin']))
        {
            if($_SESSION['admin']==1)
                {
                    /----this part works, I am logged in as admin----/
                }
        }
?>
<div id="page_shop"></div>
</body>

shop.php

<?php

        if(isset($_SESSION['admin']))
        {
            if($_SESSION['admin']==1)
                {

                }
            else{}
        }
        else{}  <----I end up here as if $_SESSION['admin'] is not set----/


        /----code entered here loads fine----/
?>

这个想法是在 shop.php 中的每篇文章上制作一个删除和编辑按钮(如果您以管理员身份登录)。 问题是 $_SESSION['admin'] 在 index.php 上被识别,但不在 shop.php 内

我尝试直接在其中输入 shop.php 的内容并且它可以工作,问题是我希望它通过单击按钮来加载。

【问题讨论】:

  • 尝试在您的 shop.php 文件中添加session_start();
  • 还是不行 应该不会是因为session_start();在我从未离开的 index.php 之上?

标签: javascript php jquery html session


【解决方案1】:

如果您想使用任何 Session 变量(在任何 PHP 页面中),那么您必须首先声明 session_start(); 因此,如果您的索引上有 $_SESSION['admin']="User1234"如果你想在 shop.php 中使用 $_SESSION['admin'] 的值,那么你必须再次声明 session_satart();然后使用它。例如,假设 index.php 有会话变量 $_SESSION['admin']="User1234" 并且现在您想在 shop.php 上打印“Welcome User1234”,那么您可以如下所示进行。

index.php

<?php
session_start();
$_SESSION['admin'] = "User1234";
?>

Shop.php

<?php
session_start();
echo "Welcome, ". $_SESSION['admin']
?>

输出:

Welcome, User1234

【讨论】:

  • 还是不行,我尝试在每一页上开始会话。顺便说一句:如果我用 Shift+R 刷新,我的会话会保留,但如果我在 url 栏上按 Enter 键就会消失(再次转到 index.php) 我的 xampp 设置是否不好? (我在 php.ini 中关闭了会话自动启动,但会话在每个 php 页面上启动)
  • 你添加了 session_start();在shop.php中的php标签页面顶部?
【解决方案2】:

您需要在每个需要访问会话数据的页面中添加session_start();

见:http://php.net/manual/en/function.session-start.php

编辑

由于我原始答案中提到的解决方案对您不起作用并且session_status() 在您的代码中返回 1,这意味着您的服务器上启用了会话。只有一件事可以解释您的会话丢失了:

您正在使用 AJAX 请求加载 shop.php,该 URL 与 index.php 是否在同一个域中?尝试在shop.php 之前添加完整路径,看看是否能解决问题。

需要说明的是,如果您的 index.phphttp://localhost/test/index.php 上运行,您的新代码将是:

$( "#page_shop" ).load( "http://localhost/test/shop.php" );

【讨论】:

  • 还是不行 应该不会太自session_start();在我从未离开的 index.php 之上?
  • 不,这还不够。每个 HTTP 请求都是从新开始的。当您通过 AJAX 调用加载 shop.php 时,您正在启动一个新的 HTTP 请求,PHP 服务器会加载它,就像您直接在新选项卡中浏览到该文件一样。
【解决方案3】:

好吧,我觉得自己很笨……我找到了解决方案。

我有这个脚本

$('#btn_logout').click(function(){
            <?php session_destroy();?>
        });

这是一个很大的不,如果你这样做,你应该感到羞耻

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 2012-11-19
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多