会话和页面重定向无法在托管服务器上运行?

时间:2014-01-11 08:42:04

标签: php

我的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"); } 
?>

1 个答案:

答案 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)上禁用输出缓冲。