【问题标题】:How to use Jquery ajax to set $_SESSION?如何使用 Jquery ajax 设置 $_SESSION?
【发布时间】:2010-02-27 08:21:14
【问题描述】:

我正在尝试创建一个使用 ajax 的简单登录系统,但我遇到的问题不会设置 $_SESSION。

login.js:

 $('#bt-login').click(function(){
        var login = $('#login').serialize();
        $.ajax({
            type: "POST",
            url: 'widgets/Login/loginFunction.php',
            data: login,
            cache: false,
            success: function(msg){alert(msg)}
        });
});

loginFunction.php:

 <?php
     include_once '../../dbConfig.php';
     include_once '../../config.php';

     session_start();

      $usr = mysql_escape_string($_POST['username']);
      $pass = mysql_escape_string($_POST['password']);
      $remember = intval($_POST['rememberMe']);

      $row = mysql_fetch_assoc(mysql_query("SELECT usr, id FROM members WHERE usr='".$usr."' AND pass='".md5($pass)."'"));

      if($row['usr']){
          $_SESSION['usr'] = $row['usr'];
          $_SESSION['id'] = $row['id'];
          $_SESSION['rememberMe'] = $remember;
          setcookie('DirtPileGames',$remember);
      }

 ?>

现在由于某种原因 loginFunction.php 没有设置 $_SESSION。我进行了刷新并且 $_SESSION 是空白的。

有没有人知道为什么这不起作用。

【问题讨论】:

  • 这是我到目前为止所知道的。我正在使用 session_name 函数,因此它使用我想要的名称创建一个 cookie。当 ajax 运行时,它将创建一个名为 PHPSESSID 的不同 cookie。所以我只需要弄清楚如何在不制作第二块饼干的情况下给它命名。哦,是的,如果我不包含 session_name,那么脚本确实可以正常工作。
  • 好吧,我想我已经明白了。我不得不将 session_name 和 session_set_cookie_params 放在主文件和 ajax 文件上。我不知道这是否正确,但它确实有效。

标签: php jquery ajax session


【解决方案1】:

确保每次要访问或设置会话变量时都调用 session_start()。除非您先调用 session_start(),否则刷新页面时它将为空白。

【讨论】:

    【解决方案2】:

    不知道具体问题,因为会话应该是有效的,假设你没有不小心在某处调用 session_destroy()。一些调试建议 - 确保 session_id() 在页面上匹配;如果它没有发生有趣的事情。可以尝试显式调用 session_write_close()。另外在 $_SESSION 中为错误情况(当用户不存在时)设置一些东西,以确保它不是一个简单的逻辑错误。另外,请不要使用漂亮的 md5。使用 sha 的一些变体,然后加盐。

    编辑:你提到 session_name()

    此调用修复了会话的名称,以便您可以在其他页面上引用它。如果您在另一个页面上执行 session_start() 而不用相同的名称命名会话,它将产生一个具有新 id 的新会话。

    php 文档中的注释:会话名称在请求启动时被重置为存储在 session.name 中的默认值。因此,您需要为每个请求调用 session_name()(在 session_start() 或 session_register() 被调用之前)。

    【讨论】:

    • 我做了 session_id,我得到了两个不同的 id。该网站的主要部分我得到 33a77eefa3a27732485fd86245661548 但用于我的 ajax 的 php 文件我得到 7c54561b0fcb89765db0b9da4a2a83d3。
    【解决方案3】:

    会话依赖于 cookie,请尝试省略

    setcookie('DirtPileGames',$remember);
    

    看看这是否解决了问题,很多问题取决于你的 php 堆栈。

    【讨论】:

      猜你喜欢
      • 2010-10-11
      • 2015-06-07
      • 2013-07-06
      • 2010-12-07
      • 1970-01-01
      • 2012-04-27
      • 2016-06-29
      • 1970-01-01
      • 2011-12-10
      相关资源
      最近更新 更多