我想实现一个功能就是,某一个页面,比如a.php这个页面,是需要登陆后才能访问的,如果没有登陆,直接访问的话,会提示“需要登陆”,但如果登陆后,只要不点“退出功能”,就一直可以访问。我知道在asp中可以通过在登陆验证的页面,加入session("admin")=rs("username")
//这里的username是数据库中的然后在需要登陆才能访问的页面顶部加入<%
if session("admin")="" then
response.write "<Script>window.alert('请先登录!');location.replace('login.htm');</Script>"
end if
%>上面是 asp实现的方式,请问php中也可以这样实现吗?我尝试了下,似乎不可以,我的做法是在验证页面中加入了
  session_start(); 
  session_register("username"); 
  $_SESSION["username"]=$Rs['username']; 在需要登陆才能访问的页面顶部加入
<?php
if session("username")="" then
echo "<Script>window.alert('请先登录!');location.replace('login.htm');</Script>"
end if
?>可是上面的方法不对啊,不能实现我想要的功能,所以请高手帮忙解答下,谢谢

解决方案 »

  1.   

    PHP要用PHP的语法if($_SESSION["username"]=="")
    {
        echo "<Script>window.alert('请先登录!');location.replace('login.htm'); </Script>";
    }
      

  2.   

    Warning: session_start(): Cannot send session cookie - headers already sent by (output started at ver.php:1) in ver.php on line 26这个是在登陆的时候提示的错误26行就是session_start();  //26行 
    session_register("ausername");   //27
    $_SESSION["ausername"]=$Rs['ausername']; // 28而直接访问需要的登陆的页面的错误是Parse error: parse error, unexpected T_STRING, expecting '(' in a.php on line 2
      

  3.   

    不好意思
    是我手误
    我写的是
    if($_SESSION["username"]=="") 

            echo   " <Script> window.alert('请先登录!');location.replace('login.htm');   </Script> "; 
    }
      

  4.   

    session_start()要放在第一行,前面不能有任何输出
      

  5.   

    <?php
    switch   ($_GET['action']){ 
    case   "login": 
    $strusername=$_POST['ausername']; 
    $strpassword=$_POST['apassword']; 
    if   ($strusername== "")     { 
    echo   " <Script> window.alert( 'Miss   Email! ');history.go(-1); </Script> "; 

    elseif   ($strpassword== ""){ 
    echo   " <Script> window.alert( 'Miss   Password! ');history.go(-1); </Script> "; 

    else{ 
    require_once('../conn.php'); 
    $exec= "select   *   from   admin   where   ausername= '".$strusername."' "; 
    $result=mysql_query($exec)   or   die(mysql_errno. '- '.mysql_error()); 
    $rs=mysql_fetch_object($result); 
    //echo   $exec; 
    //exit(); 
    if   (mysql_num_rows($result)==0)   { 
    echo   " <Script> window.alert( 'Wrong   Email! ');javascript:history.back(1); </Script> "; 

    elseif   ($rs->apassword <> $strpassword){ 
    echo   " <Script> window.alert( 'Wrong   Password! ');javascript:history.back(1); </Script> "; 

    else{ 
    session_start();   
    session_register("ausername");   
    $_SESSION["ausername"]=$Rs['ausername'];
    echo "<script>location.href='AllPost.php'</script>";  


    break; 
    case   "logout": 
    //session( "admin ")== ""; 
    echo   " <Script> window.alert( 'Goodbye!!! ');location.replace( 'index.htm '); </Script> "; 
    break; 

    ?>上面是我的验证代码
    请看下,我放到了第一行,还是不管了,是同样的错误...
      

  6.   

    页面是utf8编码的吗,如果是,改成ansi的试试
      

  7.   

    为什么要修改呢?
    我是使用的utf-8的码?
    不过我修改过了
    还是一样的问题
    不对啊
      

  8.   

    如果utf8编码的页面里有bom的话,会出现你说的这个错误,算了,我再做个演示吧
    a.php为session赋值页面,代码如下:
    session_start();
    $_SESSION['username']='csdn';
    header('Location: b.php');
    b.php为验证页面,代码如下:session_start();
    if($_SESSION['username']=='')
    {
        exit("<script>alert('请先登录');location.href='login.htm'</script>");
    }
    echo 'welcome';
      

  9.   

    这样的验证方式我可以实现
    但不知道为什么
    我整合到上面的登陆验证代码中后,就一直提示错误
    Warning:   session_start():   Cannot   send   session   cookie   -   headers   already   sent   by   (output   started   at   ver.php:1)   in   ver.php   on   line   26 这个就是ver.php的代码<?php 
    switch       ($_GET['action']){   
    case       "login":   
    $strusername=$_POST['ausername'];   
    $strpassword=$_POST['apassword'];   
    if       ($strusername==   "")           {   
    echo       "   <Script>   window.alert(   'Miss       Email!   ');history.go(-1);   </Script>   ";   
    }   
    elseif       ($strpassword==   ""){   
    echo       "   <Script>   window.alert(   'Miss       Password!   ');history.go(-1);   </Script>   ";   
    }   
    else{   
    require_once('../conn.php');   
    $exec=   "select       *       from       admin       where       ausername=   '".$strusername."'   ";   
    $result=mysql_query($exec)       or       die(mysql_errno.   '-   '.mysql_error());   
    $rs=mysql_fetch_object($result);   
    //echo       $exec;   
    //exit();   
    if       (mysql_num_rows($result)==0)       {   
    echo       "   <Script>   window.alert(   'Wrong       Email!   ');javascript:history.back(1);   </Script>   ";   
    }   
    elseif       ($rs-> apassword   <>   $strpassword){   
    echo       "   <Script>   window.alert(   'Wrong       Password!   ');javascript:history.back(1);   </Script>   ";   
    }   
    else{   
    session_start();       
    session_register("ausername");       
    $_SESSION["ausername"]=$Rs['ausername']; 
    echo   " <script> location.href='AllPost.php' </script> ";     
    }   
    }   
    break;   
    case       "logout":   
    //session(   "admin   ")==   "";   
    echo       "   <Script>   window.alert(   'Goodbye!!!   ');location.replace(   'index.htm   ');   </Script>   ";   
    break;   
    }   
    ?> 
      

  10.   

    在你程序的最上面加上<?php ob_Start(); ?>试试看
      

  11.   

    b.php:
    <?PHP
    session_start();
    if(empty($_SESSION['username']))
       echo " <Script> window.alert('请先登录!');location.replace('login.htm'); </Script> ";
    ?>login.htm:
    <form method='POST' action='a.php'>
      <p>用户名:
        <input name="username" type="text" id="username">
        <br>
        密&nbsp;&nbsp;码: &nbsp;
        <input name="password" type="password" id="password"><br>
    <input type="checkbox" name="rememberMe" value="rememberMe">保存登录信息(7 天)<br>
        <br>
        <input type="submit" value="登录">
      </p>
    </form>a.php:
    <?PHP
    session_start();
    if (!empty($_POST["username"]))
    {
      $username1 = $_POST["username"];
      $_SESSION['username']=$username1;
    }......
    ?>
    我没用过session_register("");而是直接$_SESSION['username']=$username1;有高手请解答下Why
      

  12.   

    编码的问题,重新用DW建一个utf8的页面。你用eu打开会发现你现在的那个页面session_start();之前是有一个字符的
      

  13.   

    我把代码换成下面的
    <?php 
    ob_start();  
    switch  ($_GET['action']){       
    case   "login":       
    $strusername=$_POST['ausername'];       
    $strpassword=$_POST['apassword'];       
    if   ($strusername==""){       
    echo " <Script>window.alert('Miss Email!');history.go(-1);</Script>";       
    }       
    elseif ($strpassword==""){       
    echo  "<Script>window.alert('Miss Password!');history.go(-1);</Script>";       
    }       
    else{       
    require_once('../conn.php');       
    $exec="select * from admin where ausername='".$strusername."'";       
    $result=mysql_query($exec) or  die(mysql_errno.'-'.mysql_error());       
    $rs=mysql_fetch_object($result);       
    //echo               $exec;       
    //exit();       
    if (mysql_num_rows($result)==0){       
    echo "<Script>window.alert('Wrong  Email!');javascript:history.back(1);</Script>";       
    }       
    elseif  ($rs->apassword<>$strpassword){       
    echo "<Script>window.alert('Wrong Password!');javascript:history.back(1);</Script>";       
    }       
    else{                      
    $_SESSION["ausername"]=$Rs['ausername'];   
    echo "<script>location.href='AllPost.php'</script>";           
    }       
    }       
    break;       
    case  "logout":       
    echo  "<Script>window.alert('Goodbye!!!');location.replace('index.htm');</Script>";       
    break;       
    }       
    ?>   没有再提示错误了,而且能正常登陆到AllPost.php这个页面,但是这个AllPost.php页面无法进入,因为它的头部是下面加的是是否登陆验证,
    <?php 
    session_start();
    if($_SESSION['ausername']=="") 

    echo   " <Script> window.alert('请先登录!');location.replace('login.htm);</Script> "; 
    }
    ?>
    总是提示“请先登录”,应该是SESSION没有成功,请问该怎么办恩?
      

  14.   

    else{                                             
    $_SESSION["ausername"]=$Rs['ausername'];       
    echo   " <script> location.href='AllPost.php' </script> ";                       
    }               
    你的這段代碼變量有問題:php是大小寫敏感的。$Rs['ausername'];=>$rs['ausername'];