如何使用Jquery ajax设置$ _SESSION?

时间:2010-02-26 18:58:10

标签: php jquery ajax session

我正在尝试创建一个使用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是空白的。

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

编辑:你提到session_name()

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

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

答案 2 :(得分:0)

会话依赖于cookie,试着忽略

setcookie('DirtPileGames',$remember);

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