php $ _session变量无法使用jQuery get()

时间:2014-02-06 14:27:37

标签: php jquery session

我有一个PHP页面,' home.php',从这样开始:

require_once "data/secure/sessions.php";
session_start();

require "data/secure/dbconn.php";
require "data/get_data.php";
    ....
    <div id="store_items"> 
            <?php echo getStoreItems(); ?>
    </div>
    ...

sessions.php文件控制会话并按预期工作。然后在同一页面的HTML中,有一个名为getStoreItems()的函数,它的开头如下:

<?php
    header("Cache-control: no-store, no-cache, must-revalidate");
    header("Expires: Mon, 26 Jun 1997 05:00:00 GMT");
    header("Pragma: no-cache");
    header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");

    require "secure/dbconn.php";

    $current_store_brand = "";
    $current_store_name = "";
    $items_per_page = 15;
    $item_type = "Groceries";

    ...

    function getStoreItems()
    {
        $current_page = 1;
        $store_data = "";
        $pages_html = "";

    if($GLOBALS['current_store_brand'] != "")
    {
        $conn = mysqli_connect($GLOBALS['host'], $GLOBALS['user'], $GLOBALS['password'], $GLOBALS['database']) or die("Could not connect to database!".mysqli_connect_error());
        ...
        return "No Stores found for ".$_SESSION['location'].", ".$_SESSION['country'].".";
    }
?>

在home.php页面上,我有一个jQuery函数,它通过$ .get()调用来调用函数,以便在用户单击按钮时从文件中获取更多数据。在第一次运行时,当用户打开页面时,该函数运行完美,但是当jQuery函数试图从文件中获取更多数据时,&#39; get.data.php&#39;,&#39; home.php&# 39;页面返回错误

    "Undefined variable: _SESSION in data/get_data.php". 

我尝试过包含&#39; sessions.php&#39;文件在外部文件但无济于事。如果$ _SESSION变量不可用,我还尝试了一个if ... else ...语句来要求sessions.php文件。当我使用来自&#39; home&#39; php&#39;的jQuery调用外部文件时,为什么$ _SESSION全局数组无法访问?页? jQuery函数的一部分如下所示:

$('#store_items').on("click", ".item > .basket_data > button", function(event)
{
    event.preventDefault();

    ...

    $.get("data/get_data.php", {"basket":"", "username":$username, "item_name":$item_name, "item_qty":$item_qty, "store_brand":$store_brand, "store_name":$store_name}, function($data)
    {
        $('#shopping_cart').html($data);
    }).fail(function(error)
    {
        $('#shopping_cart').html("An error occurred: " + error.status).append(error.responseText);
    });
@Snowburn,谢谢,你的评论让我得到了解决方案。我必须包括声明

    if(!isSet($_SESSION))
{
    require "secure/sessions.php";
    session_start();
}

在函数本身内,而不是在get_data.php文件的开头,所以看起来像这样:

    function getStoreItems()
{
    if(!isSet($_SESSION))
    {
        require "secure/sessions.php";
        session_start();
    }
    ....

现在它有效,谢谢!

1 个答案:

答案 0 :(得分:1)

您需要在session_start();

中添加data/get_data.php

在您的主页上

require_once "data/secure/sessions.php";
session_start();

require "data/secure/dbconn.php";
require "data/get_data.php";

因此,加载时文件会获取会话数据,因为session_start位于顶部

现在,当你通过ajax调用文件时,它只执行data/get_data.php,如果是session_start(),则该文件对会话一无所知。没有发起。

我建议将该行用作

$.get("data/get_data.php", 
{"basket":"", "username":$username, "item_name":$item_name, "item_qty":$item_qty, "store_brand":$store_brand, "store_name":$store_name},

$.get("data/get_data.php", 
{"basket":"","ajax_reg":"yes" ,"username":$username, "item_name":$item_name, "item_qty":$item_qty, "store_brand":$store_brand, "store_name":$store_name},

然后在文件data/get_data.php的顶部添加以下内容

if(isset($_GET["ajax_reg"]) && trim($_GET["ajax_reg"])== "yes"){
  require_once "data/secure/sessions.php";
  session_start();
}

因此,如果您在主页上包含此文件,那么它将不会重新启动session_start,但是当您通过ajax get进行调用时,如果它找到param“ajax_reg”:“yes”,那么它将执行会话启动

最后,您的文件位于不同的文件夹中,因此需要确保会话cookie保存路径正确。

session_set_cookie_params(0, "/");
session_start();

http://www.php.net/manual/en/function.session-set-cookie-params.php