2014-09-26 80 views
2

我使用一個會話設置語言如何使用ajax更新我的會話?

if(!isset($GLOBALS['lang'])){ 
    $GLOBALS['lang'] = 'en'; 
} 

然後我使用ajax更新此:

var lang = 'no'; 

$.ajax({ 
    type: "POST", 
    url: url, 
    data: { 
      lang : lang 
    }, 
    success: function (data) { (...) } 
}); 

文件被調用看起來像這樣:

global $lang; 

if(strlen($_POST['lang']) == 2){ 
    $lang = $_POST['lang']; 
    $result = array('lang_set' => $lang); 
    echo json_encode($result); 
} 

但我的全球會議沒有改變。我猜這是因爲lang.php使用另一個會話實例。

我正在使用Wordpress,所以我正在考慮是否可以使用一些內置函數來實現此目的。但我想知道是否可以使用PHP會話來跟蹤所選語言?或者我必須使用另一種方法,例如將選定的語言添加到我的網址?

UPDATE
感謝幽靈,我讓它工作。如果你正在使用WordPress的,我做在functions.php如下:

// Initialize session 
if(session_id() == '') { 
    session_start(); 
} 

// Set lang session with default language 
if(!isset($_SESSION['lang'])){ 
    $_SESSION['lang'] = 'no'; 
} 

//globals 
$GLOBALS['lang'] = $_SESSION['lang']; 
+1

'if(!session_id()){session_start();}' – 2014-09-26 15:03:37

回答

2

如果你希望他們在整個應用程序,使用會話持久:

session_start(); 
if(!isset($_SESSION['lang'])){ 
    $_SESSION['lang'] = 'en'; 
} 

然後在其他:

session_start(); 

if(strlen($_POST['lang']) == 2){ 
    $_SESSION['lang'] = $_POST['lang']; 
    $result = array('lang_set' => $_SESSION['lang']); 
    echo json_encode($result); 
} 
+0

這不起作用(測試),因爲當你打開lang.php時,它會創建另一個會話實例(我認爲)。 – Steven 2014-09-26 09:11:20

+1

@Steven nope,它會工作,你需要一個session_start()你需要訪問會話變量的腳本 – Ghost 2014-09-26 09:12:22

+0

是的,對不起 - 我的壞。我在我的lang.php文件中忘了'session_start();'。謝謝:) – Steven 2014-09-26 09:13:16