我的php $ _SESSION没有保存

时间:2017-06-17 23:15:52

标签: php ajax session post

我从PHP开始,所以我不知道出了什么问题。我正在尝试使用函数更新$ _SESSION var中的某些值,但是无法正常工作。 首先,如果我的header.php中的“未定义”,我启动了会话并为会话设置了一个默认值:

  <?php
    session_start();
    if (!isset($_SESSION["locale"])) {
      $_SESSION["locale"] = 'pt_BR';
    }
  ?>

然后我有一些调用我的PHP函数的ajax。

  $('#change_locale_br').click(function() {
    $.ajax({
      type: "POST",
      url: "i18n/i18n_functions.php",
      data: { action: "changelocale", new_locale: "pt_BR" },
      success: function() {
      }
    });
  });

在php文件中,我有以下代码:

  <?php
    function changelocale($l) {
      $_SESSION["locale"] = $l;
    }

    if(isset($_POST['action']) && $_POST['action'] == 'changelocale'){
        $l = $_POST['new_locale'];
        changelocale($l);
    }
  ?>

因此使用不同的值(pt_BR,es等)调用changelocale函数,但在调用之后它并没有真正改变$ _SESSION [“locale”]值。

我做了很多研究,没有在这里或在PHP文档页面中提出的建议。有人知道在这种情况下可以做些什么吗?

提前致谢。

2 个答案:

答案 0 :(得分:3)

您需要在页面顶部添加session_start(),您打算设置或访问registerNib:forItemWithIdentifier:信息。

答案 1 :(得分:0)

以下是解决方案:我在设置默认值后立即调用session_write_close();(用于确保会话数据为&#34;解锁&#34;,因为php不允许并发写入) header.php中会话的值:

  <?php
    ini_set('session.cookie_domain', 'localhost');
    if(!isset($_SESSION)) session_start();

    if (!isset($_SESSION["locale"])) {
      $_SESSION["locale"] = 'pt_BR';
    }
    session_write_close();
  ?>

然后在我的changelocale.php中,我调用了session_start(),最后调用了session_write_close()。现在就是这样:

  <?php
    if(!isset($_SESSION)) session_start();

    function changelocale($new_locale) {
      $_SESSION["locale"] = $new_locale;
    }

    if(isset($_POST['action']) && $_POST['action'] == 'changelocale'){
        $l = $_POST['new_locale'];
        changelocale($l);
    }
    session_write_close();
  ?>