有人能告诉我为什么我的$ _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']的值未被设置,我被重定向回登录。
有谁知道问题是什么?
谢谢!
答案 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,现在它可以正常工作。
这真的很糟糕,但是有人知道是否有办法让它在子目录中运行,因为这真的令人沮丧。