Codeigniter + ajax(jQuery)会话问题

时间:2010-05-09 05:53:27

标签: php jquery ajax session codeigniter

我在使用ajax post请求的服务器端检索会话时遇到问题。这是我的示例代码:

JavaScript的:

$(function() {
    $('.jid_hidden_data').submit(function() {
        var serialized = $(this).serialize();
        var sUrl = "http://localhost/stuff";
        $.ajax({
            url: sUrl,
            type: "POST",
            data: serialized,
            success: function(data) {
                alert(data);
            }
        })
        return false;
    });
});

CodeIngiter(PHP)方:

function stuff()
{
     $post_stuff = $this->input->post('my_stuff');     // WORKS PERFECTLY
     $user_id = $this->session->userdata('user_id');   // RETURNS NULL
}

如果注释返回NULL,则应返回用户会话数据,因为它确实存在。问题是什么?方法帖子没有得到cookie或什么?谢谢你的帮助!

更新

为了澄清我的会话设置为$ this-> session-> set_userdata($ data)。 在没有js / ajax的情况下发布它时我没有问题。我的意思是用简单的形式提交它工作正常。

1 个答案:

答案 0 :(得分:5)

使用不同的域名访问CI应用时遇到了类似的问题。即使这些域名指向同一个Web服务器,我也有两个单独的会话。

例如,请考虑此控制器:

class User extends Controller
{
    function User()
    {
        parent::Controller();
        $this->load->library('session');
    }

    function login()
    {
        $this->session->set_userdata('login_token', true);
        echo 'finished logging in';
    }

    function logout()
    {
        $this->session->unset_userdata('login_token');
        echo 'finished logging out';
    }

    function status()
    {
        if ($this->session->userdata('login_token'))
        {
            echo 'logged in';
        }
        else
        {
            echo 'not logged in';
        }
    }
}

我按顺序访​​问以下网址。每个URL旁边都有相应的输出:

http://localhost/app/user/login“已完成登录”

http://localhost/app/user/status“已登录”

http://127.0.0.1/app/user/status“未登录”

因此,当访问localhost上的应用程序时,我所拥有的会话不会转移到127.0.0.1,即使我正在使用同一个Web服务器。

您的AJAX脚本中的URL的域名是否与您正在测试的URL的域名不同?