AJAX + PHP:会话超时

时间:2009-10-31 22:02:14

标签: php javascript ajax

有人能告诉我为什么我的$ _SESSION变量没有转移到我用ajax调用的其他PHP页面。

所有页面都有session_start();

它适用于我的本地计算机,但是当我将其上传到我的服务器时,它不起作用,并且在刷新时它会将我带回登录屏幕...

编辑:

用户登录后保存的会话变量

$_SESSION['user_id'] = $user_id;
$_SESSION['username'] = $user_email;
$_SESSION['name'] = $un; 
$_SESSION['login_times'] = $login_time;
$_SESSION['profile_pic'] = $profile_pic;

当ajax脚本调用另一个PHP时:

 session_start();

 $user_id = $_GET['id'];
 $newsfeed_id = $_GET['nf_id'];
 $comment = $_GET['comment'];

 $conn = mysql_connect('localhost', 'admin', 'root') or die(mysql_error());
 mysql_select_db('main') or die(mysql_error());

 // insert new comment

 $query = "INSERT INTO newsfeed_comments ".
 "VALUES ('', '{$_SESSION['user_id']}', '{$comment}', '{$newsfeed_id}')";

  mysql_query($query) or die(mysql_error());

但是响应文本中没有返回任何内容,并且$ _SESSION ['username']的值未被设置,我被重定向回登录。

有谁知道问题是什么?

谢谢!

3 个答案:

答案 0 :(得分:3)

所有Cookie(包括会话Cookie)都有一个路径参数,用于定义Cookie有效的前缀。如果您希望会话对整个域有效,只需将其设置为“/".

可以使用session_set_cookie_params定义会话cookie参数。

答案 1 :(得分:0)

现在我想起来了,可能是因为您保存了特定域的SESSION数据。在您的本地主机上,您只是本地主机,但在服务器上,您的会话可能仅保存在您站点的特定部分。传递额外的参数以指定域。

在输入登录页面上的任何内容之前,您是否完成了session_start()?

会话的配置在这里:http://php.net/manual/en/session.configuration.php抱歉,您对使用Cookie感到困惑。

尝试

var_dump($_SESSION); die();

在每个页面上查看您的内容。

在保存到会话后,你还可以在任何地方调用header()吗?

这是一篇很好的调试你情况的文章:http://www.chipmunkninja.com/Troubles-with-Asynchronous-Ajax-Requests-g@祝你好运!

答案 2 :(得分:0)

我弄清楚问题是什么......这真的令人沮丧,但这是一个快速修复。

我有3个目录

/< - root / ajax< - 用于ajax php文件 / js< - 用于javascript文件

我向ajax / comment.php发送请求,并将目录ajax /视为不同的域。所以我将所有Ajax php文件移动到根目录并将它们重命名为ajax_File.php并编辑了javascript,现在它可以正常工作。

这真的很糟糕,但是有人知道是否有办法让它在子目录中运行,因为这真的令人沮丧。