我的php网站显然正在使用localhost。当它托管到服务器页面时,重定向不起作用(通过删除所有回显来测试)。但是当使用javascript重定向时,它可以工作但在下一页上缺少会话变量。
然后测试echo session_id();在两个页面上它显示不同的数字。我如何解决这个问题? 我使用set_include_path();方法处理服务器上的路径。
<!DOCTYPE html>
<?php
session_start();
ob_start();
set_include_path(".:/home/user/data");
echo session_id();
//echo ini_get('session.cookie_domain');
if($id == 'Login failed'){ header("Location: login.php?msg=Invalid Username or Password"); }
?>
答案 0 :(得分:2)
在将内容发送到浏览器后(session_start()
),您无法使用header()
或<!DOCTYPE html>
。
在这里,即使您使用ob_start()
来缓冲输出,之前的内容也没有被缓冲并被发送到浏览器,这会阻止header()
和session_start()
工作。
从PHP文档:
要使用基于Cookie的会话,必须先调用 session_start(),然后才能向浏览器输出任何内容。
请记住,在发送任何实际输出之前,必须先调用 header(),无论是普通HTML标记,文件中的空行还是PHP。
它可以在您的本地计算机上运行但不在您的Web托管服务提供商的服务器上运行,这很可能是由于您的PHP配置或Web服务器之间的差异造成的。例如,默认情况下,可以在本地安装(例如output_buffering = 4096
)上启用输出缓冲,并在Web主机(output_buffering = Off
)上禁用输出缓冲。