【问题标题】:php session not working properlyphp会话无法正常工作
【发布时间】:2015-05-10 12:26:35
【问题描述】:

我正在尝试使用记住我功能和注销选项为登录页面编写 php 代码。由于我是 php 新手,因此我尝试使用静态用户名和密码,而无需访问 ant 数据库。但我的问题是 php 会话,我不完全理解,所以当我尝试登录时,它会带我进入欢迎页面,但显示你没有登录。 这是login.php

<?php
@$id=$_POST['username'];
@$pass = $_POST['password'];
$loginErr="";
if(isset($_POST['login']))
{
    if($id=="sajan" && $_POST['password']="sajan123")
    {
        if($_POST['remember_me']=='on' || $_POST['remember_me']== 1)
        {
        setcookie("user", $_POST['username'] , time()+(86400 * 30),'/');
        setcookie("password", $pass = $_POST['password'] , time()+(86400 * 30));
        header('location: welcome.php');
        exit;
        }
        else {
                setcookie("user", "" , time()-3600,'/');
                setcookie("password", "" , time()-3600);
                header('location: welcome.php');
                exit;
             }
    }
    else $loginErr="invalid username or password";
 }
 ?>
<html>
<head>
<link rel="stylesheet" href="./style.css" type="text/css">
</head>
<body>
    <div id="main">
    <form method="POST" action="<?php echo $_SERVER['PHP_SELF']?>" name="login">
    <h2 style="margin:0 0 15px 0;">LOGIN</h2>
    <label>Username</label>
    <input type="text" name="username" value="<?php echo @$_COOKIE['user'];?>">
    <label>Password</label>
    <input type="password" name="password" value="<?php echo @$_COOKIE['password'];?>"/>    
    <input type="checkbox" name="remember_me" class="check" <?php if(isset($_COOKIE['user'])) 
    {
    echo 'checked="checked"';
    }
else   {
        echo '';
        }
?>/>
    <label style="width:200px;">Remember me</label>
        <input class="submit" type="submit" name="login" value="Login" />
        <div style="float:left; color:red;"><?php echo $loginErr;?></div>
</form>
</div>
</body>
</html>

这是我的welcome.php页面

 <?php
    if (!isset($_SESSION['user'])) 
            {
                echo "you are not logged in ";
                echo isset($_SESSION);
                exit;
            }
       else {
                 echo "Welcome ".$_COOKIE['user']." .<br>";
                echo "Your login is successful. ";
            }
?>

还有我的 logout.php 页面

<?php
session_start();
unset($_SESSION);
session_destroy();
session_write_close();
header('Location: login.php');
exit;
?>

【问题讨论】:

  • 在所有页面的开头提及session_start();
  • 另外,您的登录页面没有在 $_SESSION 中设置任何内容,因此欢迎页面将没有任何要检查的内容,尤其是您没有在登录脚本中执行 `session_start()'
  • 试过了,还是一样的问题
  • 你在混合cookiessessions
  • 我认为您将此代码复制到某处,因此并没有真正理解它的作用,如果您想从头开始学习 PHP,并查看每个命令的作用。如果你没有复制它仍然适用:)。

标签: php session


【解决方案1】:

您必须先检查 SESSION 是否已创建,因此如果有人访问此页面并且该页面已被记录,它可以正确重定向他:

<?php 
   session_start();
   if (isset($_SESSION['username']) {
       if ($_SESSION['username']=="sajan" && $_SESSION['password']="sajan123") {
           header('location: welcome.php');
       }
    } else if (isset($_POST['login'])) {
           $id = $_POST['username'];
           $pass = $_POST['password'];

           if($id=="sajan" && $_POST['password']="sajan123") {

               $_SESSION['username'] = $_POST['username'];
               $_SESSION['password'] = $_POST['password'];

               if($_POST['remember_me']=='on' || $_POST['remember_me']== 1) {

                   setcookie("user", $id, time()+(86400 * 30),'/');
                   setcookie("password", $pass, time()+(86400 * 30));
                   header('location: welcome.php');
                   exit;
               }
               else {
                   setcookie("user", "" , time()-3600,'/');
                   setcookie("password", "" , time()-3600);
                   header('location: welcome.php');
                   exit;
              }
        } else {
            $loginErr="invalid username or password"; 
        }
    }
?>

【讨论】:

  • 谢谢,在你说之前我已经修改了我的代码。
【解决方案2】:

SESSION在登录成功时没有定义,所以先定义SESSION并在欢迎页面中签入以备进一步使用...试试这个... p>

if($id=="sajan" && $_POST['password']="sajan123")
    {
         session_start();
         $_SESSION['user']=$id;  //assgn a value to session when successful login
        if($_POST['remember_me']=='on' || $_POST['remember_me']== 1)
        {
        setcookie("user", $_POST['username'] , time()+(86400 * 30),'/');
        setcookie("password", $pass = $_POST['password'] , time()+(86400 * 30));
        header('location: welcome.php');
        exit;
        }
        else {
                setcookie("user", "" , time()-3600,'/');
                setcookie("password", "" , time()-3600);
                header('location: welcome.php');
                exit;
             }
    }

【讨论】:

    【解决方案3】:

    基本上你没有启动session,你怎么能期望程序在另一个页面上返回一个会话变量。

    试试这个:

    <?php
    //Starting session
    session_start();
    @$id=$_POST['username'];
    @$pass = $_POST['password'];
    
    
    
    $loginErr="";
    if(isset($_POST['login']))
    {
        //Creating session variable
        $_SESSION['user'] = $id;
    
    
         //EDIT: $_POST['password']=="sajan123"
        if($id=="sajan" && $_POST['password']=="sajan123")
        {
            if($_POST['remember_me']=='on' || $_POST['remember_me']== 1)
            {
            setcookie("user", $_POST['username'] , time()+(86400 * 30),'/');
            setcookie("password", $pass = $_POST['password'] , time()+(86400 * 30));
            header('location: welcome.php');
            exit;
            }
            else {
                    setcookie("user", "" , time()-3600,'/');
                    setcookie("password", "" , time()-3600);
                    header('location: welcome.php');
                    exit;
                 }
        }
        else $loginErr="invalid username or password";
     }
     ?>
    

    【讨论】:

      【解决方案4】:

      你忘记在登录时设置会话变量试试这个代码,这会起作用

      <?php
      if(isset($_POST['login']))
      {
          if($id=="sajan" && $_POST['password']="sajan123")
          {
      
              session_start();
            $_SESSION['username']=$_POST['username'];
      
      
              if($_POST['remember_me']=='on' || $_POST['remember_me']== 1)
              {
      
              setcookie("user", $_POST['username'] , time()+(86400 * 30),'/');
              setcookie("password", $pass = $_POST['password'] , time()+(86400 * 30));
              header('location: welcome.php');
              exit;
              }
              else {
                      setcookie("user", "" , time()-3600,'/');
                      setcookie("password", "" , time()-3600);
                      header('location: welcome.php');
                      exit;
                   }
          }
          else $loginErr="invalid username or password";
       }
       ?>
      

      【讨论】:

        【解决方案5】:

        您在welcome.php 中检查!isset($_SESSION['user']),而不是$_COOKIE['user']

        【讨论】:

          猜你喜欢
          • 2018-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-22
          • 1970-01-01
          相关资源
          最近更新 更多