簡體   English   中英

PHP會話沒有被保存

[英]php sessions are not being saved

我為文字牆表示歉意,但在一段時間內,我一直將頭撞在牆上,以解決這個問題,因此,我將嘗試提供盡可能多的信息。 我不太確定我遇到的問題是否與用戶會話有關(我是PHP的新手),但這在我看來就是這樣。

我要求用戶輸入他的登錄信息(ID和密碼)以在ask_login.php中進入系統:

<div class="login_box">
        <h1>Login</h1>
        <form method="POST" action="login.php">
        <p><input type="text" name="username" placeholder="UserID"></p>
        <p><input type="password" name="password" placeholder="Password"></p>
        <input type="submit" name="submit" value="Login"></p>
        </form>
</div>

如果在數據庫中找到了登錄詳細信息(標識和密碼),則該用戶將登錄到其用戶門戶(login.php) ,可以在其中檢查其詳細信息,考試日期等。我的問題是無論何時登錄,如果我單擊例如詳細信息按鈕以檢查用戶詳細信息,它會將我重定向到我的ask_login.php頁面,再次詢問我的登錄詳細信息,說我沒有輸入任何ID /密碼詳細信息。 我嘗試刪除代碼,以檢查登錄表單是否提交為空白,並且該代碼最終開始工作,並且能夠單擊“詳細信息”按鈕或任何其他按鈕,而無需重定向到ask_login.php。 但是現在當我單擊“詳細信息”按鈕時,“歡迎使用用戶名”行中沒有顯示用戶名,這使我認為它與php會話有關。 此外,我進行的任何查詢都不會顯示結果。

這是我的login.php代碼:

<?php
session_start();


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

if($username && $password) {
  $conn_error = 'Could not connect.';
  $mysql_db = '------';
  if(!mysql_connect('localhost', '------', '') || !mysql_select_db($mysql_db)) {
  die($conn_error);
}
  $query = mysql_query("SELECT * FROM users WHERE id='$username' AND password='$password'");

    $numrows = mysql_num_rows($query);

      if($numrows!== 0) 
      {
          while($row = mysql_fetch_assoc($query))
          {
            $dbusername = $row['id'];
            $dbpassword = $row['password'];
          }

          if($username==$dbusername && $password==$dbpassword) {
            //echo "You are logged in!";
            @$_SESSION['id'] = $username;
          }
          else {
            echo "<script>alert('Username/Password are incorrect');</script>";
            echo "<script language='javascript'>window.location = 'ask_login.php';</script>";
            die();
            //die("Wrong username/password!");
          }
      }
        else {
            echo "<script>alert('User doesn't exist.');</script>";
            echo "<script language='javascript'>window.location = 'ask_login.php';</script>";
            die();
           //die("That user doesn't exist!");
         }
}

    else if(empty($username) || empty($password)) {
   echo "<script>alert('You didn't enter an ID/Password');</script>";
    echo "<script language='javascript'>window.location = 'ask_login.php';</script>";
    die();
    //die("Please enter an ID and password!");
}

?>



<!DOCTYPE HTML>

<html>
<head>
    <title>Logged in | FCUL</title>
    <link rel="stylesheet" href="css/stylesheet_loggedin.css" type="text/css"/>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
        <link rel="shortcut icon" href="img/vitor-20130904-favicon.ico"/>
</head>


<body>

            <div id="header">
                <br/>
                    <a href="index.php"><img src="/img/fcul_cent_logo_001.png" width="510" height="70"/></a>
            </div>


<div id="loggedinas">
<br/>

Welcome, 
<?php 
$result = mysql_query("SELECT nome FROM users WHERE id='$username'");
while($row = mysql_fetch_assoc($result)) {
    echo $row["nome"];
} 
?> 

( <?php echo $username;  ?> ) 
 <br/>


 <div id="logout">
 <a href="logout.php"><font size="2"><u>[Logout]</u></a></font></a>
</div>

<hr/>
</div>



 <?php
//FETCH USER'S BI
    if(isset($_POST['username'] )) {

    $ID = $_REQUEST['username'];

  $query = "SELECT bi FROM users WHERE id='$ID'";

      //if query is successful
    if($query_run = mysql_query($query)) {

      //if it returns 0 rows
    if(mysql_num_rows($query_run)==NULL) {
    echo "<script>alert('Unexpected Error 004');</script>";
    echo "<script language='javascript'>window.location = 'index.php';</script>";
    }

      while($query_row = mysql_fetch_assoc($query_run)) {
      $bi = $query_row['bi'];
      //echo $bi;
      }
  } 
}

?>



<br/>
<center>
<div id="buttons">

<form method="POST" action="login.php">
   <input type="submit" name="details" value="details">
    </form>

<?php
//**print user's BI if he clicks on 'Details' button**
    if($_POST['detalhes']){
    echo '<div id="content">' . $bi . '</div>';
}
?>


</div>
</center>
</body>
</html>

您無需檢查用戶是否已經登錄,因此,在從ask_login.php收到您的帖子后,單擊頁面中的任何內容時,$ username和$ userpassword將為空。

只需在session_start之后包裝所有代碼即可

if($_SESSION['id'] === false)
{

    //Your code
    $username = $_POST['username'];
    $password = $_POST['password'];

    if($username &&...

}

您不能在第一次將會話插入$ _SESSION ['id'] = $ username變量時訪問會話。
您只能在session_start()的第二次運行中訪問它;

嘗試這個。
1.制作login.php
2.制作welcome.php

嘗試分離模塊,其中login.php將僅用於檢查登錄過程,然后如果此條件成功,則

<?
if($username==$dbusername && $password==$dbpassword) {
    //echo "You are logged in!";
    $_SESSION['id'] = $username;
    header("location: welcome.php");
}
?>

在welcome.php中

<? 
session_start();
// this is for the checking if user is loged in
if (!$_SESSION['id']) {
 header("location: ask_login.php");
 exit;
}
?>

用這個包裝你的代碼

if ($_SESSION['id']){
//your login checking here
};

例如

if ($_SESSION['id']){
if($username && $password) {
  $conn_error = 'Could not connect.';
  $mysql_db = '------';
  if(!mysql_connect('localhost', '------', '') || !mysql_select_db($mysql_db)) {
  die($conn_error);
}
  $query = mysql_query("SELECT * FROM users WHERE id='$username' AND password='$password'");

    $numrows = mysql_num_rows($query);

      if($numrows!== 0) 
      {
          while($row = mysql_fetch_assoc($query))
          {
            $dbusername = $row['id'];
            $dbpassword = $row['password'];
          }

          if($username==$dbusername && $password==$dbpassword) {
            //echo "You are logged in!";
            @$_SESSION['id'] = $username;
          }
          else {
            echo "<script>alert('Username/Password are incorrect');</script>";
            echo "<script language='javascript'>window.location = 'ask_login.php';</script>";
            die();
            //die("Wrong username/password!");
          }
      }
        else {
            echo "<script>alert('User doesn't exist.');</script>";
            echo "<script language='javascript'>window.location = 'ask_login.php';</script>";
            die();
           //die("That user doesn't exist!");
         }
}

    else if(empty($username) || empty($password)) {
   echo "<script>alert('You didn't enter an ID/Password');</script>";
    echo "<script language='javascript'>window.location = 'ask_login.php';</script>";
    die();
    //die("Please enter an ID and password!");
}
}
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM