php$\u会话变量不能与jQuery get()一起使用
我有一个PHP页面“home.PHP”,开头如下:php$\u会话变量不能与jQuery get()一起使用,php,jquery,session,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(); ?> </d
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>
...
<?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'].".";
}
?>
function getStoreItems()
{
if(!isSet($_SESSION))
{
require "secure/sessions.php";
session_start();
}
....
我曾尝试在外部文件中包含“sessions.php”文件,但没有成功。我也试过一个if…else。。。语句,如果$\u SESSION变量不可用,则需要sessions.php文件。为什么当我从“home”php页面使用jQuery调用外部文件时,$\u会话全局数组不可访问?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);
});
@斯诺伯恩,谢谢,你的评论让我找到了解决办法。我必须包括这些陈述
if(!isSet($_SESSION))
{
require "secure/sessions.php";
session_start();
}
在函数本身内部,而不是在get_data.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>
...
<?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'].".";
}
?>
function getStoreItems()
{
if(!isSet($_SESSION))
{
require "secure/sessions.php";
session_start();
}
....
现在它工作了,谢谢 您需要添加
session_start()
在数据/get_data.php中
在你的主页上你有
require_once "data/secure/sessions.php";
session_start();
require "data/secure/dbconn.php";
require "data/get_data.php";
因此,加载时的文件将获取会话数据,因为会话启动位于顶部
现在,当您通过ajax调用该文件时,它只执行data/get_data.php
,如果session_start(),该文件对session一无所知;未启动
我建议通过考试,把这条线当作
$.get("data/get_data.php",
{"basket":"", "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();
}
因此,如果您在主页上包含此文件,则它不会重新启动会话启动,但当您通过ajax get进行调用时,如果它找到参数“ajax\u reg”:“yes”,则它将启动会话
最后,您的文件位于不同的文件夹中,因此需要确保会话cookie保存路径正确
session_set_cookie_params(0, "/");
session_start();
我将会话保存在数据库中,这就是为什么我要包含“sessions.php”文件来控制写入和读取。我刚试过你说的,但还是不行。信不信由你,两天前它运转良好,然后突然停止工作。我尝试过撤销我可能做过的任何事情,但都没有用。是的,它刚刚开始给我错误。如果我可以问一下,在处理会话时,文件夹层次结构是否重要?以前,get_data.php和home.php文件位于同一文件夹级别,现在get_data.php文件位于更深的文件夹中,位于名为“data”的文件夹中。如果将会话数据存储在磁盘中,则会出现问题。我还没有尝试使用DB,所以可能我需要检查手册,以给你一个具体的答案。欢迎您,我将尝试在DB和subdir访问中保存会话,以查看我是否得到,据我所知,我曾经尝试过在REDIS上存储,并为我工作得很好。但是会话总是通过配置文件包含,并且它包含在每个文件中,并且工作正常,我一定会检查它。@maxp检查您的数据库,它还在写新会话吗?那里有什么变化吗?尝试更改会话对象以输出一些读写数据,以确保其正常工作