我在使用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的情况下发布它时我没有问题。我的意思是用简单的形式提交它工作正常。
答案 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的域名不同?