PHP 会话在本地主机上工作,但在实际服务器上不起作用


PHP session is working on localhost but not on actual server

我在将会话变量传递到另一个页面时遇到问题。它在本地主机上工作,但不在服务器上工作。我想传递 $_SESSION['user_check'] 来编辑密码注册.php但每当我点击提交时,$_SESSION['user_check'] 都是空的。

这是登录注册.php

<?php
include('db.php');
session_start(); 
?>
<div id="wrapper">
<div id="wrapper-bg">
<div id="wrapper-bgtop">
  <div class="container" id="header">
    <div class="container" id="logo">
      <h1><a href="indexhomepage.php"></a></h1>
    </div>
  </div>
  <div class="container" id="page">
    <div id="loginbox">
        <form action="" class="formbox" method="post">
        <label>Email Address:</label> 
        <input class="box1" name="email" type="text"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <label>Password:</label> 
        <input class="box2" name="password" type="password"> 
        <a class="myButton1" href="forgetpassword.php">Forgot Password</a><br>
        <input class="submit5" name="submit" type="submit" value="Login"> 
        <a href="signup.php" id="myButton2">Create Account</a>
        </form>
            <?php
            if (isset($_POST['submit']))
            {
            $email =   ($_POST["email"]);
            $password =($_POST["password"]);
            $_SESSION['user_check'] = $_POST["email"];
            $sql = mysql_query ("SELECT * FROM user WHERE email = '$email'  ");
            $row = mysql_fetch_array($sql);
            $drawemail = $row['email'];
            $drawpassword = $row['password'];   
            if (($drawemail == $email ) && ($drawpassword == $password ))
            {
            ?>
            <script>window.location = "../wordsignup.php";</script>;
            <?php
            }
            else 
            {
            echo "wrong password or username";
            }
            }
            ?>
    </div>
  </div>
  <div class="container" id="footer-content-bg">
    <div id="footer-content">
      <ul>
        <li class="footer1">
          <a href="aboutus.php">About us</a>
        </li>
        <li>
          <a href="termandcon.php">Term and Conditions</a>
        </li>
        <li>
          <a href="privacyadvertising.php">Privacy Advertising</a>
        </li>
        <li>
          <a href="policy.php">Policy</a>
        </li>
        <li>
          <a href="userargeement.php">User Agreement</a>
        </li>
      </ul><br>
      <div id="copyright">
        © . All Rights Reserved.
      </div>
    </div>
  </div>
</div>

这是编辑密码注册.php

  <?php 
  include('db.php');
  session_start();
  $user_check = $_SESSION['user_check'];
  ?>
 <div id="wrapper">
<div id="wrapper-bg">
<div id="wrapper-bgtop">
  <div class="container" id="header">
    <div class="container" id="logo">
      <h1><a href="indexhomepage.php"></a></h1>
    </div>
  </div>
  <div class="container" id="page">
    <div id="forgetpassword">
      <div style="font-size:20px; color:#000080; font-weight:bold; border-width:1px; border-style:none; width:600px; margin:10px 0px 0px 175px;">
        Edit Password
      </div>
      <div style="font-size:16px;border-style:none; width:560px; margin:20px 0px 10px 175px; font-weight:bold;">
        Please enter your old password below and we will send you your password.
      </div>
      <div id="forgetpasswordbox">
        <form class="forgetpassword" method="post">
        Please enter your old password<br>
        <input class="oldpassword" name="oldpassword" type="password"><br><br>
        Please enter your new password<br>
        <input class="newpassword" name="newpassword" type="password"><br><br>
        Please re-enter new password<br>
        <input class="confirmpassword" name="confirmpassword" type="password"><br><br>     
        <input name="submit" type="submit" value="Send" class="send">
        </form>
      </div>
    </div>
  </div>
  <div class="container" id="footer-content-bg">
    <div id="footer-content">
      <ul>
        <li class="footer1">
          <a href="aboutus.php">About Us</a>
        </li>
        <li>
          <a href="termandcon.php">Term and Conditions</a>
        </li>
        <li>
          <a href="privacyadvertising.php">Privacy Advertising</a>
        </li>
        <li>
          <a href="policy.php">Policy</a>
        </li>
        <li>
          <a href="userargeement.php">User Agreement</a>
        </li>
      </ul><br>
      <div id="copyright">
        © . All Rights Reserved.
      </div>
    </div>
  </div>
   </div>
  </div>
  </div>
    <?php       
    if (isset($_POST['submit']))
    {               
    $oldpassword = $_POST['oldpassword'];
    $newpassword = $_POST['newpassword']; 
    $confirmpassword = $_POST['confirmpassword']; 
    $sql = mysql_query (("SELECT * FROM user WHERE email='user_check' AND password='$oldpassword' "),$conn);
    $row = mysql_fetch_array($sql);
    $email = $row['email'];
    $selectpassword = $row['password'];
    if ($oldpassword == "")
    {
    echo '<script language="javascript">';
    echo 'alert("pls enter your oldpassword")';
    echo '</script>';
    exit;
    }
    if($newpassword=="")
    {
    echo '<script language="javascript">';
    echo 'alert("pls enter your newpassword")';
    echo '</script>';
    exit;
    }
    if($confirmpassword=="")
    {
    echo '<script language="javascript">';
    echo 'alert("pls enter your confrimpassword")';
    echo '</script>';
    exit;
    }       
    if (($oldpassword) != ($selectpassword)) 
    {
    echo '<script language="javascript">';
    echo 'alert("No user exists with this password  '.$selectpassword.' ")';
    echo '</script>';
    exit;
    }
    if ($newpassword == ($confirmpassword))
    {   
    mysql_query("UPDATE user SET password = '".$newpassword."' WHERE email='".$email."'");
    $message = "Your password ".$newpassword." and click the link uploadsignup.php to upload your photo";   
    mail($email, "Change Password", $message);
    ?>
    <script>
    alert("Password Successfully change...!!!!'nClick OK to upload photo'nNewpassword will send to your email address");
    window.location="uploadsignup.php";
   </script>   

    <?php
    }
    else 
    {
    echo '<script language="javascript">';
    echo 'alert("new password does not match")';
    echo '</script>';
    }
    }
    ?>

正如您所说,它适用于本地主机而不是特定服务器,您可能在 php.ini 中有不同的设置。查看 http://php.net/manual/en/session.configuration.php

我曾经遇到过几个小时的这个问题。我的会话在本地主机上工作,但没有从一个页面传递到另一个页面。问题是我在会议开始上方的评论。由于某种原因,它不会影响本地主机,但我的服务器只是没有它。

因此,如果有其他人阅读有关此问题的这篇文章,您可以尝试其他方法。

这里有几件事需要纠正:

1)不要在页面中使用样式,使用CSS类和Id而不是样式。我已经编辑了这个问题以删除它们,因为它们妨碍了我们感兴趣的真实代码。

2)不要使用MySQL,它已被弃用,这意味着它不再受支持,不再支持的原因是存在各种缺陷和安全问题,我强烈建议将MySQLi或PDO作为连接到数据库的替代方法。认真地。

3)您的问题是syntx - 我们将从括号开始 - 请参阅:

$email =   ($_POST["email"]);
$password =($_POST["password"]);

应该是:

    $email =   $_POST['email'];
    $password =$_POST['password'];

分配变量时,无需将值放在括号中。另请注意,数组值用单引号'而不是双引号。所以:

$_SESSION['user_check'] = $_POST['email'];

会更好,或者试试这个:

if (!empty($_POST['email'])){
$_SESSION['user_check'] = $_POST['email'];
}
else {
$_SESSION['user_check'] = "No Email value given in form";
}

以替换上述行。

4)您的HTML代码不完整,您的表单在第二个代码块中没有action值,这些事情可能并不重要,但是由于模棱两可,此代码很容易出错。

5)在editpasswordsignup的顶部.php(session_start后)把这个:

var_dump($_SESSION['user_check']);并使用第 3 点的上述代码,这应该会给你一个输出。

6) 检查您的 SQL:

$sql = mysql_query (("SELECT * FROM user WHERE email='user_check' AND password='$oldpassword' "),$conn);

您的电子邮件值是一个字符串,而不是一个变量。你这里的SQL也一团糟,这是什么原因?

将上述内容替换为:

 $sql = mysql_query("SELECT * FROM user WHERE email='$user_check' AND password='$oldpassword' LIMIT 1");

完成上述所有操作,您的代码即可正常工作。

尝试如下:

<?php session_start();
-----
-----
?>

根据 op 问题和所需的答案,为什么代码在本地主机而不是服务器上工作,Arun 似乎给出了正确的答案。太糟糕了,他被否决了,但这可能是因为他在回答中没有解释任何事情。

我以前遇到过这个问题。解决方案是确保您上方或下方没有空间

   <?php

线。我相当确定这就是为什么 Arun 画了线来指示你的其他 php 代码应该立即遵循。

我只是遇到了同样的问题,我到此结束。即使我没有看到session_set_cookie_params()也许你已经在db.php上输入了它.由于在会话上使用LOCALHOST session_set_cookie_params(time()+600,'/','LOCALHOST',false,true);不起作用,因此如果您使用session_set_cookie_params(),则必须确保已将LOCALHOST替换为您的域