之前遇到过一次然后过两天故障又消失了就没去管~~
这次要深究。
求原因求解决方法PS:租用的空间,所以无法修改php.ini本地调试正常,登陆正常,SESSION正常上传到虚拟空间之后,登陆正常,SESSION失效
echo phpinfo()部分如下config.phprequire('./libs/Smarty.class.php');
$smarty = new Smarty;
//$smarty->force_compile = true;
$smarty->debugging = false;
$smarty->caching = false;
$smarty->cache_lifetime = 120;
login.php<?php
require('config.php');
$return=$_GET['return'];
$smarty->assign("maintitle","登陆界面",true);
$smarty->assign('return_url',$return);
$smarty->display('login.html');
?>login_check.php<?php
require('conn.php');
require('config.php');
session_start();
//取数据,省略
if(mysql_num_rows($query)==1)
{
if(密码正确)
{
$userid=$result['user_id'];
$_SESSION['userid']=$userid;
if($return=="")
{
$response="<script>alert('成功登陆');</script>
<meta  http-equiv=refresh content='0; url=index.php'>";
}
else
{
$response="<script>alert('成功登陆');</script>
<meta  http-equiv=refresh content='0; url=$return'>";
}
}
else
{

$response="<script>alert('密码错误');</script>
<meta  http-equiv=refresh content='0; url=login.php'>";
}
}
else
{
$response="<script>alert('用户名错误');</script>
<meta  http-equiv=refresh content='0; url=login.php'>";

}
$smarty->assign('status',$response,true);
$smarty->display('login_check.html');
?>
index.php<?php
require('config.php');
require('conn.php');
if(!$_SESSION['userid'])
{
$smarty->assign("action","<a href=\"login.php\">登陆</a> <a href=\"reg.php\">注册</a>");
}
else
{
$smarty->assign("action","{$userid}<a href=\"logout.php\">注销</a>");
}


//省略$smarty->assign('kind',$tree);
$smarty->assign("welcome","欢迎");
$smarty->assign("userid",$_SESSION['userid']);
$smarty->display('index.html');
?>

解决方案 »

  1.   

    session_start();要放到最前面吧?包括在引用的前面。
      

  2.   


    虚拟空间上报错如下Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at 、、/login_check.php on line 2Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /、、login_check.php on line 2
     
      

  3.   

    login_check.php
    <?php
    session_start();
    require('config.php');
    require('conn.php');
    如果有BOM头,还请删去
      

  4.   

    头部已经发送,
    你可以试一试把所有的php脚本中?>都给删除掉试一试(或者所有的PHP脚本文件?>结束符之后不要留任何空白符号)。
    试一试!
      

  5.   


    用的是smarty~~用工具检测了一下~脚本都没有bom头~~模板页存在~~
    然后清除了模板页的bom头之后~~
    再打开页面~~login_check.php不报错了~~但是session也没有生效~~而且页面变成乱码了~~
      

  6.   

    这个报错的意思是明显,在你session_start函数设定前,前面就已经有输出了
    如果代码没有错,那就是有BOM头,也有可能是php文件的BOM头
      

  7.   


    请看#6....已经删除bom头~~文件编码都一致~~是UTF8能否抽空加小弟QQ交流一下?503959718
      

  8.   

    在每个页面都得加上session_start()函数的
    可以在页面的最前面加入 @session_start();
      

  9.   

    http://conproject.1x.net/index.php
    测试账号密码都是pingtai
      

  10.   

    开启session之前不能有任何输出,一个空格也不行。乱码的话,看看字符集是否一致。
      

  11.   

    session_start();需要放在最前边的
      

  12.   

    文件编码都一样是UTF8~~bom头也全都删了检查后发现~~
    服务器空间上的session.auto_star=OFF
    而我本机localhost的是开着的~~然后~~我的登陆界面还引入有一个incode.php~是用来显示验证码的,里面有一句是session的
    $_SESSION['adminrand']=strtolower($randval);
    然后login_check.php会使用这个session值来检查验证码输入是否正确~~
    问题会不会是在这里?具体如下
    模板页面login.html<form action="login_check.php" method="post">
      <p align="center">{$maintitle}</p>
      <p align="center">账户
        <input name="user" type="text" />
      </p>
      <p align="center">密码
        <input name="pwd" type="password" />
      </p>
      <p align="center">验证码<img src="./incode.php" alt="点击刷新验证码" onclick="javascript:this.src='./incode.php?id='+Math.random()" />
        <input name="incode" type="text" id="incode" size="6" />
      </p>
      <p align="center">
        <input type="submit" name="submit" id="submit" value="提交">
      </p>
    </form>
    验证码文件incode.php<?php
    $width=50;
    $height=20;
    ob_start("Content-type:image/gif");
    $randval=randstr(4);
    $im=imagecreatetruecolor($width, $height);
    $r=array(255,215,235,195,175);
    $g=array(255,215,235,195,175);
    $b=array(255,215,235,195,175);
    $key=rand(0,4);
    $backcolor=imagecolorallocate($im, $r[$key], $g[$key], $b[$key]);$pointcolor=imagecolorallocate($im,255,170,255);
    imagefill($im,0,0,$backcolor);
    $stringcolor=imagecolorallocate($im,0,0,0);
    for ($i=0;$i<=100;$i++)
    {
    $pointx=rand(2,$width-2);
    $pointy=rand(2,$height-2);
    imagesetpixel($im, $pointx, $pointy, $pointcolor);

    }
    imagestring($im,3,5,1,$randval,$stringcolor);
    $imagefun='Imagegif';
    $imagefun($im);
    imagedestroy($im);
    function randstr($len=10)
    {
    $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    $string="";
    while(strlen($string)<$len)
    {
    $string.=substr($chars,(rand()%strlen($chars)),1);


    }
    return $string;
    }
    $_SESSION['adminrand']=strtolower($randval);
    ?>
      

  13.   

    好了,ob_start应该改成header,ob_start所带的参数只能说回调函数
      

  14.   

    这么说~~所有的问题都源自于那个验证码文件incode.php??????