【问题标题】:How do I carry over a php session from one page to another via Javascript?如何通过 Javascript 将 php 会话从一个页面转移到另一个页面?
【发布时间】:2011-10-23 16:39:03
【问题描述】:

我有一个表单(form.php),它在标题中使用以下 JS 代码:

<script type="text/javascript">
$(document).ready(function(){
$("a").click(function(){

$.post('test.php', function(data) {
        $('#test').html(data);
    });
    });
});
</script>

在 form.php 中有一个链接,一旦点击我希望出现一个下拉菜单(不刷新页面),例如“显示下拉菜单”。下拉列表中的代码在 test.php 中管理。

Test.php 从另一个服务中提取数据。为了获取这些数据,我使用会话中保存的数据,例如$_SESSION['data_that_is_sent_to_another_service']。

我在 form.php 中启动会话,但为了让 test.php 从其他服务获取信息,我需要在 test.php 开始时启动会话。

代码有效,但随后我收到警告:

Warning: session_start() [function.session-start]:
Cannot send session cache limiter - headers already sent
(output started at /..my directory.../test.php:1) in /...my directory.../hrdeals.php on line 4

我怎样才能让这个警告不出现(不关闭 PHP 中的警告)?

非常感谢任何帮助。

格雷戈

PS - JS 可能不正确,但更多的是我可以解决的 SESSION 问题

【问题讨论】:

  • 当您收到包含headers already sent 的错误时,它告诉您您尝试做的事情需要在 输出任何内容(包括空格)之前完成,包括include/requireing 其他文件。所以你必须在输出任何东西之前调用session_start()(例如header())。
  • 秋葵谢谢你。你能推荐一个搜索引擎吗?

标签: php javascript session


【解决方案1】:

session_start() 必须在向浏览器输出任何内容之前调用。检查 test.php 并确保没有输出。

【讨论】:

  • 这就是我的意思,已经有输出(在 form.php 页面的顶部),所以当我调用 test.php 时,我再次调用了 SESSION,这给了我这个警告。我该如何解决这个问题?理想情况下,您启动会话一次,然后我不需要在 test.php 中启动它。 test.php 中没有任何输出(只是 PHP 代码,没有回声等)
  • 不,这应该不是问题,因为两个文件(form.php 和 test.php)都是独立执行的。您可能会在 test.php 文件中有一些输出(可能只是&lt;? 之前的一个空格)。请发布 test.php 的内容。
  • 感谢 middus,我不久前清除了所有空格,但没有工作 - 我只是将代码复制到一个名为 test2.php 的新文件中,它工作......不知道发生了什么!不过现在修好了。非常感谢。
【解决方案2】:
  1. Javascript 和 PHP 会话彼此无关。 Javascript 生活在它的小泡泡中(客户端渲染/处理)。 PHP 生活在它的泡沫中(服务器端处理/输出)。

  2. 您得到的错误是(简要地) - 标头已发送。

这是指 http 标头(不是您可能有一些 javascript 的 head 标签)。您可以在此处查看完整列表:http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

当您在输出标题之前开始渲染网页内容时会发生此错误。必须先完成所有标题。

在 session_start() 发生后检查所有来自 php 的回声和打印。打印爬行的一个棘手的地方是当你结束 php 标签并在那里有任何东西时——即使它在页面的末尾。您不需要在页面末尾结束 php 标记,甚至后面的空格也会导致此类问题。最安全的做法是删除 php 文件底部的所有结束 php 标签。

另一个棘手的问题是,这种错误也是由代码编辑器输出的“字节顺序标记”引起的。您可以尝试在一个简单的纯文本编辑器中打开、修复和保存页面,看看是否能解决问题。

【讨论】:

    猜你喜欢
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 2013-01-28
    相关资源
    最近更新 更多