2014-02-06 90 views
0

我有一個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函數,通過$不用彷徨調用函數()調用以在用戶單擊按鈕時從文件中獲取更多數據。在第一次運行,當用戶打開頁面,功能完美運行,但當jQuery函數試圖從文件中獲取「get_data.php」數據越多,「home.php頁面返回錯誤

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

我曾嘗試在外部文件中包含'sessions.php'文件,但無濟於事。如果$ _SESSION變量不可用,我還嘗試了一個if ... else ...語句來需要sessions.php文件。爲什麼當我從'home'php'頁面使用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

您需要在data/get_data.php

添加session_start();在您的主頁有

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,並且這個文件不知道會話的任何內容if 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,但是當您通過aja撥打電話時x得到,如果它發現參數「ajax_reg」:「是」,那麼它將執行會話開始。

最後,您的文件位於不同的文件夾中,因此需要確保會話cookie保存路徑是正確的。

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

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

+0

我現在的儲蓄在數據庫中我的會議,這就是爲什麼我包括「sessions.php」文件來控制寫入和讀出。我只是嘗試了你所說的,但它仍然不起作用。相信與否,兩天前它運轉良好,然後突然停止工作。我曾試圖撤消我可能做的任何事情,但無濟於事。 –

+0

你的意思是它在工作之前,現在不是? –

+0

是的,它剛剛開始給我錯誤。如果我可能會問,處理會話時文件夾層次結構是否重要?之前,get_data.php和home.php文件位於相同的文件夾級別,現在get_data.php文件是一個名爲'data'的文件夾中更深的文件夾。 –