我有一个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();
}
....
现在它有效,谢谢!
答案 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